我工作的一個應用程序,包含了一些按鈕通過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>
所有諸如填充,中風,半徑等屬性是相同的,除了不同狀態下的漸變顏色。我的問題是,我的應用程序必須有更多的樣式。你可以想象它,因爲你有顏色列表,當你選擇一個應用程序將所有顏色改變爲選定的顏色。所以如果你有20種顏色,20種不同的xmls是不正確的。
所有android:狀態的startColor和endColor值都從網上下載並保存到DB,我不知道它們中有多少個。
有什麼辦法可以實現這種行爲嗎?我搜索了所有論壇,大部分答案都是不可能的。我發現了一個覆蓋colors.xml的'解決方案',但它似乎並不是我最好的解決方案。
所以我的問題是,我可以動態改變colors.xml中的顏色嗎?類似這樣的東西
List<Colors> colors = downloadColorsFromWeb();
Button b = new Button;
b.setDrawable(drawable.with(colors));
謝謝大家提前。
nosko。