Я работаю над приложением, которое содержит несколько кнопок, определенные с помощью layout.xml как этогокнопки с различными цветами и тем же стилями
<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/largebutton" >
</Button>
@ вытяжка/largebutton выглядит следующим образом
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" >
<shape>
<gradient android:startColor="@color/menu_button_active_start" android:endColor="@color/menu_button_active_end" android:angle="270" />
<stroke android:width="@dimen/largebutton_stroke" android:color="@color/menu_button_stroke" />
<corners android:radius="@dimen/largebutton_radius" />
<padding android:left="@dimen/largebutton_padding_leftright" android:top="@dimen/largebutton_padding_topbottom" android:right="@dimen/largebutton_padding_leftright" android:bottom="@dimen/largebutton_padding_topbottom" />
</shape>
</item>
<item android:state_focused="true" >
<shape>
<gradient android:startColor="@color/menu_button_focused_start" android:endColor="@color/menu_button_focused_end" android:angle="270" />
<stroke android:width="@dimen/largebutton_stroke" android:color="@color/menu_button_focused_stroke" />
<corners android:radius="@dimen/largebutton_radius" />
<padding android:left="@dimen/largebutton_padding_leftright" android:top="@dimen/largebutton_padding_topbottom" android:right="@dimen/largebutton_padding_leftright" android:bottom="@dimen/largebutton_padding_topbottom" />
</shape>
</item>
.....
</selector>
All свойства, такие как прокладка, ход, радиус одинаковы, кроме цветов градиента в разных состояниях. Моя проблема в том, что мое приложение должно иметь больше стилей. Вы можете представить это, поскольку у вас есть список цветов, и когда вы выбираете одно приложение, все цвета меняются на выбранный. Так что, если у вас 20 цветов, 20 разных xmls - неправильный путь.
Оба значения startColor и endColor для всех android: состояния загружаются из сети и сохраняются в DB, и я не знаю, сколько из них есть.
Есть ли способ достичь такого поведения? Я искал все форумы, и большинство ответов было то, что это невозможно. Я нашел одно «решение», переписывающее colors.xml, но это не кажется лучшим решением для меня.
Так что мой вопрос: могу ли я динамически изменять цвет в цветах.xml? Что-то вроде этого
List<Colors> colors = downloadColorsFromWeb();
Button b = new Button;
b.setDrawable(drawable.with(colors));
Спасибо всем заранее.
nosko.