2011-02-17 49 views
11

我已經在Android中創建了自定義ToggleButtons,並且因爲所有按鈕都從相同的xml繼承我想根據狀態更改它們的行爲方式,所以當檢查狀態時,我想改變陰影顏色,但這似乎不可能與當前的SDK。按鈕上的陰影顏色取決於XML中的狀態 - Android

我創建持有button_colors的XML文件:

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

<item 
    android:color="#000000" /> 
</selector> 

但這似乎只與字體顏色工作,並在文本中未陰影顏色。 有什麼我失蹤了嗎? 而不是在代碼中手動執行每個按鈕,因爲我希望這適用於應用程序中的每個按鈕。

UPDATE編輯:

我的選擇目前看起來像這樣

<selector 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<item 
    android:state_checked="true" 
    android:drawable="@drawable/button_gradient_selected" /> 

<item 
    android:drawable="@drawable/button_gradient" /> 

</selector> 

但正如我所提到的評論員下面我似乎無法改變風格/從文本顏色,陰影因爲它似乎只能在一個可繪製的位置。

當我嘗試在這裏按鈕上放置不同樣式時,它強制關閉或者不會根據狀態更改樣式。當我只是試圖在這裏放置風格,並將可繪製設置爲它強制關閉的樣式時。無論哪種方式,它似乎不起作用。

+0

可能重複的[如何添加陰影到選擇/焦點TextView](http://stackoverflow.com/questions/4753158/how-to-add-shadow-to-textview-on -selection-focus) – Jeremy 2012-05-27 16:27:36

回答

3

請參閱我在不同的StackOverFlow問題上的解決方案。我擴展了TextView以提供工作解決方案here。 (替換TextView與按鈕)

-1

這是你必須實現選擇文件:

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

這些是用於默認切換按鈕的圖片TEY: btn_toggle_onbtn_toogle_off

+1

感謝您的回答,但這不是答案,因爲drawable不能改變陰影顏色,只能繪製背景。 根據http://developer.android.com/guide/topics/resources/color-list-resource.html你應該使用一個單獨的顏色選擇器,但這似乎不適用於陰影。 我已經有一個XML選擇drawable,但無法弄清楚如何從那裏改變shadowcolor或樣式。 – 2011-02-17 09:01:23

+0

@Joakim Engstrom:我認爲我沒有正確理解你。你可以發佈你的活動的截圖嗎?那對我來說是不可撼動的。 – Praveen 2011-02-17 10:11:15

+0

我更新了我的問題。 – 2011-02-17 11:02:03

8

看來,Android框架不支持這一點。

從TextView.java:

 case com.android.internal.R.styleable.TextView_textColor: 
      textColor = a.getColorStateList(attr); 
      break; 

     case com.android.internal.R.styleable.TextView_shadowColor: 
      shadowcolor = a.getInt(attr, 0); 
      break; 

他們把文字顏色和不同則shadowColor。

-2

你可以有陰影顏色像這樣的選擇:color_selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:dither="true"> 
    <item 
     android:state_pressed="true" 
     android:color="@color/btn_text_on" /> 
    <item 
     android:state_focused="true" 
     android:color="@color/btn_text_on" /> 
    <item 
     android:color="@color/btn_text_off" />   
</selector> 

然後邊造型的按鈕,在styles.xml這樣使用這個選擇:

<style name="ButtonStyle"> 
<item name="android:textColor">#FF383C48</item> 
    <item name="android:textSize">12sp</item> 
    <item name="android:shadowColor">@drawable/color_selector</item> 
    <item name="android:shadowDx">0</item> 
    <item name="android:shadowDy">1</item> 
    <item name="android:shadowRadius">1</item> 
    <item name="android:typeface">sans</item> 
    <item name="android:textStyle">bold</item> 
</style>