Вы можете создать button selector
xml в каталоге drawable
, как показано ниже.Он определяет различные элементы рисования для использования, когда кнопка находится в разных состояниях, например: по умолчанию, нажата и т. Д.
drawable/my_button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- pressed -->
<item android:state_pressed="true" android:drawable="@drawable/my_button_pressed" />
<!-- focused -->
<item android:state_focused="true" android:drawable="@drawable/my_button_pressed" />
<!-- selected -->
<item android:state_selected="true" android:drawable="@drawable/my_button_pressed" />
<!-- default -->
<item android:drawable="@drawable/my_button_default" />
</selector>
Затем определите соответствующие drawable xml
для разных состояний:
drawable/my_button_default.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- define this color in your colors.xml -->
<solid android:color="@color/default_button_color"/>
<!-- this makes the rounded corners button -->
<corners android:radius="5dp" />
</shape>
drawable/my_button_pressed.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- define this color in your colors.xml -->
<solid android:color="@color/pressed_button_color"/>
<corners android:radius="5dp" />
</shape>
Теперь вы можете использовать drawable/my_button_selector
в xml
, который определяет button
:
<Button
android:id="@+id/my_button"
android:background="@drawable/my_button_selector"
android:layout_width="200dp"
android:layout_height="160"
android:text="My Button" />
Обратите внимание, что для API Level 21 or higher
вы можете использовать эффект ripple
по умолчанию.Поместите ниже my_button_selector.xml
в каталог drawable-v21
:
drawable-v21/my_button_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/ripple_material_light">
<item android:id="@android:id/mask">
<shape android:shape="rectangle">
<solid android:color="@android:color/white" />
<corners android:radius="5dp" />
</shape>
</item>
<item android:drawable="@drawable/my_button_default" />
</ripple>
При этом Android будет использовать v21/my_button_selector.xml
для API Level 21 or higher
.Для уровня API ниже этого, он использует drawable/my_button_selector.xml
.