[英]Drawable resources and text color
我使用drawables
很好地設計我的按鈕樣式,除了按鈕中的文本顏色外,它工作得很好。
我在selector
定義了一個state_enabled="false"
項,並使用setEnabled
為我提供了正確的按鈕樣式,但我必須跳過相當多的循環才能使文本顏色不同。 例如,此代碼不起作用(禁用時顯示無或黑色文本,啟用時顯示黑色):
public void setButtonsEnabled(boolean enable) {
btnAccept.setEnabled(enable);
btnDecline.setEnabled(enable);
int color = R.color.White;
if (!enable) {
color = R.color.DarkGray;
}
btnAccept.setTextColor(color);
btnDecline.setTextColor(color);
}
我找到了解決方案。
關鍵在於還將TextColor設置為res/colors
的selector
:
android:textColor="@color/button_text"
android:background="@drawable/button_selector"
對於后台選擇器我使用了這個:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_pressed="false" android:drawable="@drawable/btn_buddy_enabled"></item>
<item android:state_enabled="false" android:drawable="@drawable/btn_buddy_disabled"></item>
<item android:state_enabled="true" android:state_pressed="true" android:drawable="@drawable/btn_buddy_clicked"></item>
</selector>
textColor選擇器是這樣的:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="true" android:state_pressed="false" android:color="@color/White"></item>
<item android:state_enabled="false" android:color="@color/Gray"></item>
<item android:state_enabled="true" android:state_pressed="true" android:color="@color/White"></item>
</selector>
只需調用setEnabled()
就可以使一切正常。
您使用錯誤的顏色值。 R.color.White返回值的資源ID,而不是值本身。 嘗試使用Color.WHITE或getResources()。getColor(R.color.White)
你檢查過ColorStateLists
嗎? 他們非常棒。 因此,基本上將Drawable
選擇器的所有想法應用於一組顏色。
創建一個名為[Your Project] / res / colors /的文件夾,然后在其中放入一個名為button_color.xml(或其他)的xml文件。
button_color.xml
<?xml version="1.0" encoding="utf-8"?>
<selector
xmlns:android="http://schemas.android.com/apk/res/android"
>
<!-- Any Enabled button, gets White Text -->
<item
android:color="@color/White"
android:state_enabled="true" />
<!-- Buttons with any other state, get DarkGray Text -->
<item
android:color="@color/DarkGray"/>
</selector>
然后對於TextView
,你可以做一些像mTextView.setTextColor(R.color.button_color);
此時不需要if / else類型的邏輯, selector
將為您完成。 選擇器匯總到顏色資源中,但它實際生成的類稱為ColorStateList
,以防您在其他文檔中找到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.