簡體   English   中英

可繪制的資源和文本顏色

[英]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/colorsselector

   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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM