3

私は次のことを望んでいます:.)クリックすると背景が変わるテキストビュー.)再度クリックされるまでその背景を維持する

それはすべて「チェック可能な」状態になりますが、これがどのように機能するのか正確にはわかりませんでした。これが私が背景に使用しているxmlです:

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

<!-- pressed -->
<item android:drawable="@drawable/menuselected"
android:state_pressed="true" />

<!-- checked -->
<item android:drawable="@drawable/menuselected"
android:state_checked="true" />

<!-- default -->
<item android:drawable="@drawable/transpixel"/>

</selector>

更新: 一部動作するようになりました。カスタム Textview には、http: //kmansoft.com/2011/01/11/checkable-image-button/のほとんどのコードを採用しました。実際にこれを行ったので、ラジオボタンの機能も必要です。Textview をチェックできるようになりましたが、チェックを外すことはできません。なぜそれが当てはまるのか、誰にもわかりますか?

4

2 に答える 2

1

カスタムTextView実装android.widget.Checkableインターフェースを作成します。セレクターを機能させるにはこれで十分です。

以下は実装例です。

public class CheckableTextView extends TextView implements Checkable {
    private boolean isOn=false;

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

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

    public CheckableTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public int[] onCreateDrawableState(final int extraSpace) {
        final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
        if (isChecked())
            mergeDrawableStates(drawableState, CHECKED_STATE_SET);
        return drawableState;
    }

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

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

    @Override
    public void toggle() {
        isOn=!isOn;
        refreshDrawableState();
    }

}
于 2013-05-20T11:47:51.943 に答える