Как установить цвет выбора кнопок вместе с закругленными углами в android?
Я хочу установить закругленный угол для кнопки в android вместе с изменением цвета кнопки при выборе. Я делаю следующее.
вытяжка/push_button.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@color/green"/>
<item android:state_focused="true" android:drawable="@color/green"/>
<item android:state_focused="false" android:drawable="@color/green"/>
<item android:state_pressed="false" android:drawable="@color/red"/>
<item android:drawable="@drawable/push_button_background"/>
</selector>
вытяжка/push_button_background.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
>
<solid android:color="#3F4040"/>
<corners
android:radius="7dp"
/>
</shape>
и в коде я использую
android:background="@drawable/push_button"
Здесь проблема заключается в том, что цвета кнопок устанавливаются правильно, когда они выбраны и отменены. Но закругленные углы не работают.
Как это сделать?
Если я использую
android:background="@drawable/push_button_background"
тогда закругленные углы работают, но изменение цвета кнопки при выборе не работает.
Как это реализовать?
Я ссылался на эту ссылку. Даже тогда никакой помощи!
Ответы
Ответ 1
Я нашел ответ для моего вопроса с несколькими попытками проб и ошибок.
Вот решение.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true">
<shape >
<solid android:color="@color/green"/>
<corners
android:radius="7dp"/>
</shape>
</item>
<item android:state_focused="true" >
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/green"/>
<corners
android:radius="7dp"/>
</shape>
</item>
<item android:state_focused="false" >
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/red"/>
<corners
android:radius="7dp"/>
</shape>
</item>
<item android:state_pressed="false" >
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<solid android:color="@color/red"/>
<corners
android:radius="7dp"
/>
</shape>
</item>
</selector>
Ответ 2
То, что я сделал, было определено формой и указало dp каждого угла.
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" android:padding="90dp">
<solid android:color="#FFFFFF"/>
<padding />
<corners
android:bottomRightRadius="15dp"
android:bottomLeftRadius="15dp"
android:topLeftRadius="15dp"
android:topRightRadius="15dp"/>
</shape>
Если вы увеличиваете dp в каждом углу, это сделает кнопку более округленной.
Ответ 3
Мне удалось сделать то, что вы описываете. Я сделал следующее:
Сначала я создал новый класс, который расширяет Button. В этом классе я создал метод setState():
public void setState (int s)
{
if (s > 0 && s < 4 &&)
{
this.state = s;
switch (state)
{
case 1:
setBackgroundDrawable (def_gray);
break;
case 2:
setBackgroundDrawable (lt_gray);
break;
case 3:
setBackgroundDrawable (black);
}
}
}
Три фоновых рисунка, которые вы видите выше, - это файлы XML, описывающие внешний вид кнопки. Они в основном одни и те же, но различаются в цвете для каждого из них. Серая кнопка по умолчанию описывается следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient
android:startColor="#333333"
android:endColor="#333333" />
<stroke
android:width="2dp"
android:color="@android:color/white" />
<corners
android:radius="5dp" />
<padding
android:left="2dp"
android:top="2dp"
android:right="2dp"
android:bottom="2dp" />
</shape>
</item>
</selector>
Насколько я знаю, этот формат XML будет использоваться для настройки градиента цвета на лицевой панели. Поскольку это было не то, что я хотел, я установил оба значения цвета одинаковыми, а цвет фона был согласован. Возможно, вам придется немного поэкспериментировать с значениями цвета, но похоже, что у вас уже есть дескриптор.