2016-09-13 10 views
1

Я хочу создать кнопку с пользовательской формой, которая будет реагировать на прессе, как в теме «Base.Widget.AppCompat.Button.Colored».Изменения формы кнопки в то время как mantaining своего материала дизайн мультипликационного эффекта

Однако bacause из я должен настроить его формы (закругленные углы, которые я должен переопределить его android:background - это пока единственный способ, которым я знаю (нет ... нет, я не буду использовать ухищрений с FrameLayout). в настоящее время это может быть сделано только , предоставляя наш обычай <shape> в XML-файл в качестве фона Drawable

наиболее перспективным код, который позволит selectableItemBackground - так Тон задает для меня, это:.

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape> 
      <solid android:color="@color/colorAccent"/> 
      <corners android:topLeftRadius="@dimen/button_shape_radius" 
       android:topRightRadius="@dimen/button_shape_radius"/> 
     </shape> 
    </item> 

    <item android:drawable="?attr/selectableItemBackground"> 
     <shape> 
      <solid/> 
      <corners android:topLeftRadius="@dimen/button_shape_radius" 
       android:topRightRadius="@dimen/button_shape_radius"/> 
     </shape> 
    </item> 
</layer-list> 

К сожалению, я не могу сформировать второй предмет с <item android:drawable="?attr/selectableItemBackground">, поэтому в конце нажатой формы предмета прямоугольник.

Я бы воспринял это, если кто-то даст мне повод для этой проблемы. Я использую API_MIN = 16, поэтому не могу использовать эффект пульсации. Я также не хочу использовать FrameLayout или другую внешнюю библиотеку, которая заставляет меня обернуть Button с чем-то.

ответ

1

Чтобы иметь пульсации ниже 21 вы можете использовать эту библиотеку Ripple Effect вы используете вашу форму без пульсации тега и окружать вид с RippleView для получения более подробной информации вы можете проверить Usage раздел

21+ вы можете попробовать это я не проверял, но он должен работать, поместить это в папке вытяжке-v21

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
android:color="?attr/colorControlHighlight"> 
<item> 
    <shape> 
     <solid android:color="@color/colorAccent"/> 
     <corners android:topLeftRadius="@dimen/button_shape_radius" 
      android:topRightRadius="@dimen/button_shape_radius"/> 
    </shape> 
</item> 

<item android:drawable="?attr/selectableItemBackground"> 
    <shape> 
     <solid/> 
     <corners android:topLeftRadius="@dimen/button_shape_radius" 
      android:topRightRadius="@dimen/button_shape_radius"/> 
    </shape> 
</item> 
</ripple> 

UPDATE

меняю d исходный код Ripple Effect на кнопку

Вы можете получить код here

ПРИМЕНЕНИЕ

Так же, как и любой обычный кнопки

XML

<path.to.the.RippleButton 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/button_rounded_top_blue" 
    android:id="@+id/mybutton"/> 

Java

RippleButton button = (RippleButton) findViewById(R.id.mybutton); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Toast.makeText(MainScreen.this, "You did it", Toast.LENGTH_SHORT).show(); 
      } 
     }); 

Если вам нужен другой вид вам просто нужно сделать несколько настроек к исходному коду, это легко (на мой взгляд)

+0

Библиотека работает, однако это не самый лучший soultion 4me, потому что я должен использовать каждый раз, когда оболочка за пределами моего представления, в то время как я хочу декларировать ** один ** Стиль кнопки с целью повторного использования кода – murt

+0

, что вы правы, вчера я пытался сделать то же самое, у меня есть 4 представления на моем приложении, заполнить экран, и я должен обернуть все с помощью «Rippleview», я тестировал несколько устройств, и у меня не было проблем с производительностью, но мой макет прост. –

+0

Я не одобрил ваш ответ, потому что я надеюсь, что кто-то придумал что-то лучшее – murt

 Смежные вопросы

  • Нет связанных вопросов^_^