Работя върху приложение, което съдържа някои бутони, дефинирани чрез 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>
@drawable/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>
Всички свойства като подложка, щрих, радиус са еднакви, с изключение на градиентните цветове в различни състояния. Проблемът ми е, че приложението ми трябва да има повече стилове. Можете да си го представите като имате списък с цветове и когато изберете едно приложение променя всички цветове към избрания. Така че, ако имате 20 цвята, 20 различни xml не е правилният начин.
И двете стойности startColor и endColor за всички android:states се изтеглят от мрежата и се записват в DB и не знам колко от тях има.
Има ли някакъв начин да се постигне това поведение? Прерових всички форуми и повечето отговори бяха, че е невъзможно. Намерих едно „решение“, презаписващо colors.xml, но не изглежда най-доброто решение за мен.
И така, въпросът ми е мога ли динамично да променя цвета в colors.xml? Нещо подобно
List<Colors> colors = downloadColorsFromWeb();
Button b = new Button;
b.setDrawable(drawable.with(colors));
Благодаря на всички предварително
носко.