防止ToggleButton切换状态

时间:2011-04-29 15:08:26

标签: android

我有一个ToggleButton,当你点击它时,我不希望状态改变。在我收到任何按钮切换的反馈后,我将自己处理状态更改。如何防止点击状态发生变化?

3 个答案:

答案 0 :(得分:5)

您可以使用带有空主体的覆盖ToggleButton方法实现自己的toggle()

答案 1 :(得分:2)

您只需使用CheckedTextView即可。

当然,您需要根据状态设置背景图像和文本,但除了那些(您可能已经使用过)之外,它是一个不错的替代解决方案。

这是一个示例代码,以防错过textOn和textOff属性:

CheckableTextView.java:

public class CheckableTextView extends CheckedTextView {
    private CharSequence mTextOn, mTextOff;

    public CheckableTextView (final Context context, final AttributeSet attrs, final int defStyle) {
        super(context, attrs, defStyle);
        final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CheckableTextView, defStyle, 0);
        mTextOn = a.getString(R.styleable.CheckableTextView_textOn);
        mTextOff = a.getString(R.styleable.CheckableTextView_textOff);
        a.recycle();
    }

    public CheckableTextView(final Context context, final AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CheckableTextView(final Context context) {
        this(context, null, 0);
    }

    @Override
    public void setChecked(final boolean checked) {
        super.setChecked(checked);
        if (mTextOn == null && mTextOff == null)
            return;
        if (checked)
            super.setText(mTextOn);
        else
            super.setText(mTextOff);
    }

    public void setTextOff(final CharSequence textOff) {
        this.mTextOff = textOff;
    }

    public void setTextOn(final CharSequence textOn) {
        this.mTextOn = textOn;
    }

    public CharSequence getTextOff() {
        return this.mTextOff;
    }

    public CharSequence getTextOn() {
        return this.mTextOn;
    }


}
res / values / attr.xml中的

<declare-styleable name="SyncMeCheckableTextView">
    <attr name="textOn" format="reference|string" />
    <attr name="textOff" format="reference|string" />
</declare-styleable>

另一种可能的解决方案是在ToggleButton上使用setClickable(false),并在运动操作为ACTION_UP时处理onTouchListener。

答案 2 :(得分:0)

虽然我认为您可以将其标记为已禁用,但我认为这不是一个好主意,因为用户已经习惯了这种按钮的某种语义。

如果您只想显示某些状态,为什么不使用ImageView并根据状态显示不同的图像?