2010-10-06 10 views
4

我試圖創建一個按鈕,該按鈕在默認狀態下具有自定義背景,但仍然使用特定於所運行的任何設備的按下/選定狀態的顏色。是否有一個Android API來獲取默認按鈕被按下/選擇的顏色?

從看的EditText源代碼,似乎沒有這樣的API,並且按下/選擇的顏色只是硬編碼:

public EditText(/*Context context, AttributeSet attrs, int defStyle*/) { 
super(/*context, attrs, defStyle*/); 

     StateListDrawable mStateContainer = new StateListDrawable(); 

     ShapeDrawable pressedDrawable = new ShapeDrawable(new RoundRectShape(10,10)); 
     pressedDrawable.getPaint().setStyle(Paint.FILL); 
     pressedDrawable.getPaint().setColor(0xEDEFF1); 

     ShapeDrawable focusedDrawable = new ShapeDrawable(new RoundRectShape(10,10)); 
     focusedDrawable.getPaint().setStyle(Paint.FILL); 
     focusedDrawable.getPaint().setColor(0x5A8AC1); 

     ShapeDrawable defaultDrawable = new ShapeDrawable(new RoundRectShape(10,10)); 
     defaultDrawable.getPaint().setStyle(Paint.FILL); 
     defaultDrawable.getPaint().setColor(Color.GRAY); 

     mStateContainer.addState(View.PRESSED_STATE_SET, pressedDrawable); 
     mStateContainer.addState(View.FOCUSED_STATE_SET, focusedDrawable); 
     mStateContainer.addState(StateSet.WILD_CARD, defaultDrawable); 

     this.setBackgroundDrawable(mStateContainer); 
} 

任何人都可以驗證它是不可能的一個應用程序知道當前設備上按下/選擇的顏色是什麼?

如果應用程序無法確定按下/選擇的顏色是什麼,則無法爲與不同設備上的UI匹配的按鈕創建選擇器。

似乎Android必須提供一種方法來找出這些顏色是什麼,以便應用程序可以使用與正在運行的設備的UI一致的顏色。

謝謝!

-Tom B.

後續行動,以響應CaseyB的評論,我試過如下:

StateListDrawable d = new StateListDrawable(); 
d.addState(android.R.attr.state_enabled, getResources().getDrawable(R.drawable.my_custom_background)); 
myButton.setBackgroundDrawable(d); 

但它會導致按鈕使用所有狀態的自定義背景。似乎沒有辦法告訴StateListDrawable使用按下/選定狀態的默認繪圖。

回答

0

你應該使用一個有狀態的drawable,並讓它使用這些狀態的默認drawable。

+0

感謝您的回覆,但是創建一個有狀態的drawable並不會自動包含按下/選中狀態的默認drawable。我用我測試的有狀態可繪製代碼更新了我的原始文章。 – tombz 2010-10-08 18:37:52

1

最簡單的方法是爲您的按鈕創建一個自定義樣式,它繼承自android:style/Widget.Button並將android:background添加到您的自定義樣式中。

+0

感謝您的回覆,但我實際上試圖將_only_設置爲默認狀態下的按鈕背景。如果您創建了自定義樣式並設置了android:background屬性,那麼該背景將用於所有按鈕狀態,包括按下和選擇。我試圖爲默認狀態設置自定義背景,並保留默認的按下/選擇狀態的可繪製。 – tombz 2010-10-08 18:26:13

+0

我相信你可以爲按鈕的不同狀態設置不同的背景 – Prashast 2010-10-10 15:51:25

+0

如何用這種方法爲按鈕的不同狀態設置不同的背景?如果您將一個帶有android:background的項目添加到您的自定義樣式中,這將覆蓋該按鈕的背景(選擇器),因此所有選定的狀態都將丟失。沒有? – Terry 2013-11-07 21:58:06