开关按钮,禁止改变状态的onClick

问题描述 投票:1回答:4

我想用一个switch button但我想禁用更改状态上点击,让这种改变只是拖动选项。我尝试设置onclick听众做什么,但是当我点击该按钮随时更改状态。

有些人知道禁用更改状态onClick

android android-widget android-switch
4个回答
2
投票

如果你想只改变与刷卡开关的状态,做到以下几点:

 switchbutton = view.findViewById(R.id.switch2);
    switchbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switchbutton.setChecked(!switchbutton.isChecked());
        }
    });

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个像素或更少是点击(并忽略它)或更多的距离被认为是运动和让这个运动传递trought正常开关behaivor。

x声明为一个类级别的变量,默认值是0 MotionEvent.ACTION_DOWN总是首先调用你将有X上的MotionEvent的X轴起点值。


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
        }
    }
});

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”,消息处理程序设置的切换按钮的正确状态。


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"
© www.soinside.com 2019 - 2024. All rights reserved.