0

このチュートリアルに基づいて、チェックされた状態を模倣するカスタムImageButtonクラスがあります。カスタムボタンの状態を追加する方法ToggleButton's

属性として描画可能な状態リストがある場合、すべてが正常に機能しandroid:srcますが、カスタム状態は属性では機能しませんImageButton's android: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>
4

1 に答える 1

0

おそらく日食のもう一つの素晴らしい特徴..

コードを手動で最後の動作バージョン(タグに描画可能な状態リスト)に戻そうとするとandroid:src、同じエラーが発生しました。SVNリポジトリから元に戻しましたが、機能しました。次に、以前とまったく同じ変更を、文字ごとに、違いはなく、ボイラーで行いました。これで機能します。

これで、問題のコードは完全に機能します。

于 2012-11-22T15:37:13.910 に答える