2

我想使用切换按钮,但我想禁用单击时的更改状态,仅更改为拖动选项。我尝试将onclick侦听器设置为什么也不做,但是当我单击按钮时总是会改变状态。

有人知道禁用更改状态onClick吗?

4

5 回答 5

3

如果您只想通过滑动更改开关的状态,请执行以下操作:

 switchbutton = view.findViewById(R.id.switch2);
    switchbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switchbutton.setChecked(!switchbutton.isChecked());
        }
    });
于 2018-01-02T12:27:37.307 回答
1

使用 switch 小部件,您必须创建 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 的起始值。

于 2016-10-01T05:12:53.493 回答
0

使用切换按钮而不是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
        }
    }
});
于 2014-01-20T12:00:00.273 回答
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());

}

这对我有用。在我的情况下,单击切换按钮向服务发送请求,如果服务回复“OK”,则消息处理程序设置切换按钮的正确状态。

于 2016-03-02T20:05:14.513 回答
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"
于 2019-07-05T09:22:40.043 回答