Как настроить кнопки для 3 разных состояний - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь создать свою собственную версию, говорит Саймон.Я хочу создать три состояния (цвета) для кнопок;выкл (ложь), мигает нажата (правда).Если я использую mButton1.setbackgroundColor(Color.Red), я теряю стиль кнопки XML.Как это можно сделать без потери стиля XML или есть лучший способ стилизовать кнопки.

1 Ответ

0 голосов
/ 10 июня 2018

Вы можете создать 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...