Состояние нажата не работает в кнопке - PullRequest
0 голосов
/ 13 мая 2018

В моей деятельности есть кнопка, для которой я хочу следующее поведение

Кнопка должна иметь выбранную границу цвета Когда кнопка нажата, выбранный цвет должен заполнить всю кнопку

Например, если я выбрал оранжевый цвет, у кнопки должен быть оранжевый фон по умолчанию, а когда кнопка нажата, кнопка должна быть заполнена оранжевым цветом.

Итак, я сделал этот пользовательский чертеж

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true" android:state_selected="true">
        <shape>
            <solid android:color="@color/colorAccent" />
            <corners android:radius="30dp" />
            <stroke android:width="2dp" android:color="@color/colorAccent" />
        </shape>
    </item>

    <item>
        <shape>
            <corners android:radius="30dp" />
            <stroke android:width="2dp" android:color="@color/colorAccent" />
        </shape>
    </item>

</selector>

Я применил это в качестве фона к кнопке, и я получил правильное поведение по умолчанию. Но когда кнопка нажата, я не наблюдаю изменений.

Как мне заставить это работать?

1 Ответ

0 голосов
/ 13 мая 2018

Если указать два свойства android:state_pressed="true" android:state_selected="true", оно будет работать как оператор and(&).Правильный способ - установить индивидуальное <item/> для всего поведения

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <corners android:radius="30dp" />
            <solid android:color="@color/colorAccent" />
        </shape>
    </item>
    <item android:state_focused="true">
        <shape android:shape="rectangle">
            <corners android:radius="30dp" />
            <solid android:color="@color/colorAccent" />
        </shape>
    </item>
    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <corners android:radius="30dp" />
            <solid android:color="@color/colorAccent" />
        </shape>
    </item>
    <item android:state_focused="false" android:state_pressed="false">
        <shape>
            <corners android:radius="30dp" />
            <stroke android:width="2dp" android:color="@color/colorAccent" />
        </shape>
    </item>
</selector>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...