2016-10-04 61 views
0

我目前有一組ToggleButtons,由一個RadioGroup包圍,每個按鈕引用一個選擇器,用於更改按鈕狀態的顏色,並編寫代碼以實現無線電按鈕行爲。這很好。 (編輯:我要提的是,選擇是什麼了android:按鈕的背景元素被稱爲)在「ImageToggle」按鈕上更改顏色狀態

的選擇是這樣的

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

現在我想第二組按鈕有完全相同的行爲。值得注意的是,這一次,我想在其中的一些圖像,而不是文字。

有很多關於如何根據按鈕的狀態更改圖像的StackOverflow帖子,但我不想根據狀態更改圖像。我想根據狀態更改按鈕的顏色(圖像具有透明背景)。

我真的試圖避免修改按鈕圖像本身。

我相信解決方案涉及到使用層列表製作選擇器,但對我來說這是一個新領域。

回答

0

顯然需要做的是在s中創建一個分層drawable這樣的選舉人:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true"> 
     <layer-list> 
      <item android:drawable="@color/gold" 
        android:gravity="fill"/> 
      <item android:drawable="@drawable/image" 
        android:gravity="fill"/> 
     </layer-list> 
    </item> 

    <item android:state_checked="false"> 
     <layer-list> 
      <item android:drawable="@color/white" 
        android:gravity="fill"/> 
      <item android:drawable="@drawable/image" 
        android:gravity="fill"/> 
     </layer-list> 
    </item> 
</selector> 

變量狀態按鈕選擇器的標準方法是Priyank上面提到的。只需將圖片必須是透明的,上面的聲明等,使得它會與背景顏色分層,以決絕的顏色狀態變化

2

中創建一個名爲RES XML colors.xml /值文件夾:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="red">#ff0000</color> 
    <color name="green">#00ff00</color> 
</resources> 

在繪製文件夾中創建一個XML文件my_btn_toggle.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="false" android:drawable="@color/red" /> 
    <item android:state_checked="true" android:drawable="@color/green" /> 
</selector> 

和XML部分定義切換按鈕:

<ToggleButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/btntoggle" 
    android:background="@drawable/my_btn_toggle"/> 
+0

這就是我用的ToggleButtons現在在做什麼。我需要知道的是 - 我在哪裏指定用於按鈕的圖像?目前,圖像按鈕使用android:background引用它們。如果我將android:background引用到選擇器,該選擇器需要保持該圖像文件的引用......不知何故(這是我的問題......我該怎麼做?) – JoeHz

+0

0

我認爲你正在尋找着色屬性 - 提到here

在您的情況下,嘗試將ColoStateList設置爲android:tint屬性。在ColorStateList文檔中,您有示例顯示顏色選擇器 - 類似可繪製選擇器,但用於顏色。

(我不知道它已經支持預棒棒糖設備或你應該PorterDuff過濾器舊版本做編程。)

+0

它很接近我不希望圖像與色調混合(着色),你甚至可以用android:tintMode指定混合方法,我回答的方法創建了一個分層繪製,最上面的圖層是你看到它寫的地方,我已經修改它來創建邊框,使用 JoeHz