2013-05-26 44 views
1

昨天我試圖解決我的按鈕禁用並啓用它們後沒有給出任何可見反饋的問題。 my problem如何在改變Backgroundcolor後從無邊界按鈕獲得反饋? selectableItemBackground

但答案並不符合我的意願,這個按鈕應該如何。最後,我發現我用自己的按鈕製作了自己的按鈕,而不是使用按鈕。 但我認爲我不想改變我的按鈕。 所以我希望我會在你的幫助下找到另一種方式。

知道的importaned的事情是,我改變了股票的按鈕,它的方式是discriped她:How to create standard Borderless buttons

我在XML按鈕:

 <Button 
      android:id="@+id/buttonEat" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="?android:attr/selectableItemBackground" 
      android:paddingBottom="@dimen/padding_size" 
      android:paddingTop="@dimen/padding_size" 
      android:text="@string/button_eat" 
      android:textColor="@color/white" 
      android:textColorHint="@color/white" 
      android:textSize="@dimen/text_size" /> 

我與API的14個工作所以API 11 isue不是問題。

我有兩種方法正在禁用和啓用我的按鈕。 啓用它們後,它們仍然是功能,但不提供任何觸摸反饋。

private void startSleeping() 
{ 
    editorState.putBoolean("SLEEPING", true); 
    editorState.commit(); 

    buttonDrink.setEnabled(false); 
    buttonEat.setEnabled(false); 
    buttonWash.setEnabled(false); 
    buttonDrink.setBackgroundColor(getResources().getColor(R.color.darkgray)); 
    buttonEat.setBackgroundColor(getResources().getColor(R.color.darkgray)); 
    buttonWash.setBackgroundColor(getResources().getColor(R.color.darkgray)); 
    buttonSleep.setBackgroundColor(getResources().getColor(R.color.orange)); 
    buttonWash.setTextColor(getResources().getColor(R.color.lightgray)); 
    buttonDrink.setTextColor(getResources().getColor(R.color.lightgray)); 
    buttonEat.setTextColor(getResources().getColor(R.color.lightgray)); 
    buttonSleep.setTextColor(getResources().getColor(color.black)); 
} 

private void stopSleeping() 
{ 
    editorState.putBoolean("SLEEPING", false); 
    editorState.commit(); 

    buttonDrink.setEnabled(true); 
    buttonEat.setEnabled(true); 
    buttonWash.setEnabled(true); 

// **Her is the problem** 
// **if tried diffrent things** 

// **First try: (brings back the old color but not the feedback)** 
//  buttonDrink.setBackgroundColor(android.R.attr.selectableItemBackground); 
// **Second try: (App crashes. Why? i don't know. The discription of selectableItemBackground says it is a drawable...)** 
//buttonDrink.setBackgroundDrawable(getResources().getDrawable(android.R.attr.selectableItemBackground)); 
// **Third try: (eclips isn't accepting this because the attribut is a int and not a drawable)** 
//buttonDrink.setBackgroundDrawable(android.R.attr.selectableItemBackground); 
//**Fourth try: (brings back a feedback but changes the lock, feedback color...)** 
TypedArray a = getBaseContext().obtainStyledAttributes(new int[]{android.R.attr.selectableItemBackground}); 
    Drawable backdraw = a.getDrawable(0); 
    buttonDrink.setBackgroundDrawable(backdraw); 

    buttonEat.setBackgroundColor(android.R.attr.selectableItemBackground); 
    buttonWash.setBackgroundColor(android.R.attr.selectableItemBackground); 
    buttonSleep.setBackgroundColor(android.R.attr.selectableItemBackground); 
    buttonWash.setTextColor(getResources().getColor(R.color.white)); 
    buttonDrink.setTextColor(getResources().getColor(R.color.white)); 
    buttonEat.setTextColor(getResources().getColor(R.color.white)); 
    buttonSleep.setTextColor(getResources().getColor(R.color.white)); 
} 

但必須有一種方法可以讓這些按鈕從selectableItemBackground返回funktionality。

這個問題似乎是背景顏色的變化。 有沒有人有任何想法?請讓我知道

回答

1

而不是更改代碼中的按鈕的背景顏色,您可以創建一個自定義繪製,併爲各種狀態(啓用,按下,...)定義顏色。 要創建自定義繪製的,只是創建/ RE的XML文件/繪製的文件夾,這裏是一些示例內容:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_enabled="false" > 
     <shape> 
      <!-- define style for disabled state here --> 
     </shape> 
    </item> 
    <item android:state_pressed="true" > 
     <shape> 
      <!-- define style for pressed state here --> 
     </shape> 
    </item> 
    <item> 
     <shape> 
      <!-- define style for normal state here --> 
     </shape> 
    </item> 
</selector> 

例如內容的形狀標籤:

<solid 
    android:color="#ffffff"/> 
<stroke 
    android:width="1dp" 
    android:color="#000000" /> 
<corners 
    android:radius="4dp" /> 
<padding 
    android:left="10dp" 
    android:top="10dp" 
    android:right="10dp" 
    android:bottom="10dp" /> 

現在你可以設置這個drawable作爲佈局xml文件中的按鈕背景。然後你只需要改變按鈕的文字顏色。

+0

我死定了自己製作的自定義按鈕,因爲我從來沒有做過它。但是,對於你的代碼示例,我只是複製它們來嘗試它是否可以在那麼簡單的一年工作,但它確實如此。 謝謝,現在我學到了新東西,可以繼續前進:) – Spen

相關問題