2012-02-27 40 views
13

我有一個xml中定義背景的按鈕。我想根據當前狀態對按鈕進行着色 - 即 - 按下,聚焦,正常。更改xml選擇器中可繪製的色調

這是我的xml文件如下。另外,我的colored_tint_darkcolored_tint都是半透明的顏色,我試圖從資源文件夾中調用可繪製圖像。這是問題。當用戶界面第一次加載時,圖像上有適當的色調,但按下後,按下的狀態不會顯示任何色調,那麼正常狀態將不會顯示任何色調。

<?xml version="1.0" encoding="utf-8"?> 

<item android:state_pressed="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button"> 
    <shape> 
     <gradient 
      android:endColor="@color/colored_tint" 
      android:startColor="@color/colored_tint" 
      android:angle="270" /> 
     <stroke 
      android:width="0dp" 
      android:color="@color/colored_tint" /> 
     <corners 
      android:radius="0dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

<item android:state_focused="true" android:drawable="@drawable/rounded_grayscale_pinstripe_button"> 
    <shape> 
     <gradient 
      android:endColor="@color/colored_tint" 
      android:startColor="@color/colored_tint" 
      android:angle="270" /> 
     <stroke 
      android:width="0dp" 
      android:color="@color/colored_tint" /> 
     <corners 
      android:radius="0dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

<item android:drawable="@drawable/rounded_grayscale_pinstripe_button">   
    <shape> 
     <gradient 
      android:endColor="@color/colored_tint_dark" 
      android:startColor="@color/colored_tint_dark" 
      android:angle="270" /> 
     <stroke 
      android:width="0dp" 
      android:color="@color/colored_tint_dark" /> 
     <corners 
      android:radius="0dp" /> 
     <padding 
      android:left="10dp" 
      android:top="10dp" 
      android:right="10dp" 
      android:bottom="10dp" /> 
    </shape> 
</item> 

我知道有這個解決方案在Java中,但我專門找了一個XML格式的解決方案。謝謝。

回答

12

創建一個選擇tint_menu_item.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:color="@color/white" android:state_pressed="true" /> 
    <item android:color="@color/white" android:state_activated="true" /> 
    <item android:color="@color/green" /> 
</selector> 

(在我的例子,選擇和綠色未選中時,當圖像是白色的)

然後在你的xml中,你可以添加色調屬性到ImageView:

<ImageView 
    android:layout_width="30dp" 
    android:layout_height="30dp" 
    android:tint="@color/tint_menu_item" 
    android:src="@drawable/ic_menu_home" /> 

您可以在一個TextView使用文字顏色attibute也使用了這種選擇:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="@color/tint_menu_item" /> 
+0

您好,我有問題與阿比18,下[鏈接](http://stackoverflow.com/questions/38673196/crash色調選擇-during-inflating-view-with-vector-drawable-tint-color-selector) 你有什麼問題可以建議嗎? – Alex 2016-08-02 16:53:16

+0

android:tint屬性不適用於所有apis。要解決此問題,您可以直接使用正確的顏色創建.png文件,然後從ImageView中刪除android:tint屬性 – 2016-08-23 14:27:24

+0

我應該在哪裏放置tint_menu_item.xml? – rraallvv 2017-02-05 16:00:48

相關問題