我有一个ToggleButton,当你点击它时,我不希望状态改变。在我收到任何按钮切换的反馈后,我将自己处理状态更改。如何防止点击状态发生变化?
答案 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并根据状态显示不同的图像?