2012-11-22 61 views
0

我有一個自定義ImageButton類模仿ToggleButton's檢查狀態根據本教程​​。ImageButton背景更改與自定義可繪製狀態

一切工作正常,當我有一個狀態列表可畫爲android:src屬性,但自定義狀態不起作用ImageButton'sandroid:background屬性。

這裏是我的代碼:

import android.content.Context; 
import android.util.AttributeSet; 
import android.widget.Checkable; 
import android.widget.ImageButton; 

public class CheckableImageButton extends ImageButton implements Checkable { 

    private static final int[] STATE_CHECKED = {R.attr.state_checked}; 

    private boolean mChecked = false; 

    public CheckableImageButton(Context context) { 
     super(context); 
    } 

    public CheckableImageButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public int[] onCreateDrawableState(int extraSpace) { 
     final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); 

     if(mChecked){ 
      mergeDrawableStates(drawableState, STATE_CHECKED); 
     } 

     return drawableState; 
    } 

    @Override 
    public boolean isChecked() { 
     return mChecked; 
    } 

    @Override 
    public void setChecked(boolean checked) { 
     mChecked = checked; 
     refreshDrawableState(); 
    } 

    @Override 
    public void toggle() { 
     setChecked(!mChecked); 
    } 
} 

而且從佈局XML相關的片段:

<com.my.package.view.CheckableImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:background="@drawable/header_button_bg" 
    android:padding="5dp" 
    android:src="@drawable/menu_button" 
    tools:ignore="ContentDescription" /> 

和國家列表繪製:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res/my.package" > 

    <item android:state_pressed="true"> 
     <shape android:shape="rectangle"> 
      <stroke android:width="1dp" android:color="#ff000000" /> 

      <gradient android:angle="-90" android:endColor="#d2914e" android:startColor="#906434" /> 

      <corners android:radius="5dp" /> 
     </shape> 
    </item> 
    <item app:state_checked="true"> 
     <shape android:shape="rectangle"> 
      <stroke android:width="1dp" android:color="#ff000000" /> 

      <gradient android:angle="-90" android:endColor="#d2914e" android:startColor="#906434" /> 

      <corners android:radius="5dp" /> 
     </shape> 
    </item> 
    <item> 
     <shape android:shape="rectangle"> 
      <stroke android:width="1dp" android:color="#ff000000" /> 

      <gradient android:angle="-90" android:endColor="#4f5b6c" android:startColor="#345b75" /> 

      <corners android:radius="5dp" /> 
     </shape> 
    </item> 

</selector> 

回答

0

日食的另一種美妙的特質大概..

當我試圖手動將我的代碼恢復到上一個​​工作版本(狀態列表在android:src標記中可繪製)時,它產生了相同的錯誤。我恢復了SVN回購,它工作。然後,我做出了和以前完全相同的改變,逐字逐句地改變,沒有什麼區別,而且現在它能奏效!

就這樣,問題中的代碼功能完整。