我想使用switch button,但我想在点击时禁用更改状态,让此更改仅限于拖动选项。我尝试设置onclick
监听器什么都不做,但是当我点击按钮时总是改变状态。
有人知道要禁用更改状态onClick
吗?
答案 0 :(得分:2)
如果您只想使用滑动更改开关的状态,请执行以下操作:
switchbutton = view.findViewById(R.id.switch2);
switchbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switchbutton.setChecked(!switchbutton.isChecked());
}
});
答案 1 :(得分:1)
使用切换小部件,您必须创建customSwitch类并覆盖onTouchEvent方法,以便在检测到单击时返回true:
public boolean onTouchEvent(MotionEvent ev) {
boolean response;
switch (ev.getAction()){
case MotionEvent.ACTION_DOWN:
x = ev.getX();
response = super.onTouchEvent(ev);
break;
case MotionEvent.ACTION_UP:
response = Math.abs(x - ev.getX()) <= 10 || super.onTouchEvent(ev);
break;
default:
response = super.onTouchEvent(ev);
break;
}
return response;
}
数字10是公差值,因为有些设备会报告3或6个像素左右的移动事件而不是点击,因此您可以控制:点击10个像素或更少(并忽略它)或更远距离是考虑到运动,让这种运动通过正常的开关行为。
将x声明为类级别变量,默认值为0。 首先调用MotionEvent.ACTION_DOWN,这样你就可以在MotionEvent的X轴上使用x和起始值。
答案 2 :(得分:0)
使用Toggle Button代替Button
用于切换按钮的xml
<ToggleButton
android:id="@+id/togglebutton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
在java类
中ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// The toggle is enabled
} else {
// The toggle is disabled
}
}
});
答案 3 :(得分:0)
//onClickListener
public void tglOnClick(View v) {
ToggleButton tgl = (ToggleButton) v;
//do something based on toggle status after clicking
if (tgl.isChecked())
//do something
else
//do something else
//revert button state so that it can be controlled by some external logic
tgl.setChecked(!tgl.isChecked());
}
这对我有用。在我的例子中,单击切换按钮向服务发送请求,如果服务回复&#34;确定&#34;,则消息处理程序设置切换按钮的正确状态。
答案 4 :(得分:0)
4年后,针对此用例发现了一种非常干净且容易的解决方案:
创建您的自定义开关并覆盖performClick(),该部分可以避免CompoundButton在单击时做出反应:
class CustomSwitch @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : SwitchMaterial(context, attrs, defStyleAttr) {
override fun performClick(): Boolean {
return false
}
}
第二部分是禁止TextView继承在单击时作出反应,只需将其添加到XML中即可:
android:textIsSelectable="false"