2012-11-22 28 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回购,它工作。然后,我做出了和以前完全相同的改变,逐字逐句地改变,没有什么区别,而且现在它能奏效!

就这样,问题中的代码功能完整。