Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 切换按钮,禁用更改状态一次单击_Android_Android Widget_Android Switch - Fatal编程技术网

Android 切换按钮,禁用更改状态一次单击

Android 切换按钮,禁用更改状态一次单击,android,android-widget,android-switch,Android,Android Widget,Android Switch,我想使用,但我想禁用单击时的更改状态,让此更改仅限于拖动选项。我尝试将onclicklistener设置为不执行任何操作,但当我单击按钮时,总是更改状态 有些人知道要禁用更改状态,请单击按钮?使用而不是按钮 切换按钮的xml <ToggleButton android:id="@+id/togglebutton" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

我想使用,但我想禁用单击时的更改状态,让此更改仅限于拖动选项。我尝试将
onclick
listener设置为不执行任何操作,但当我单击按钮时,总是更改状态

有些人知道要禁用更改状态,请单击
按钮

使用而不是
按钮

切换按钮的xml

<ToggleButton 
    android:id="@+id/togglebutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
使用而不是
按钮

切换按钮的xml

<ToggleButton 
    android:id="@+id/togglebutton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
}

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

}


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

使用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;
}
public boolean onTouchEvent(运动事件ev){
布尔响应;
开关(ev.getAction()){
case MotionEvent.ACTION\u DOWN:
x=ev.getX();
响应=超级接触事件(ev);
打破
case MotionEvent.ACTION\u UP:

response=Math.abs(x-ev.getX())使用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;
}
public boolean onTouchEvent(运动事件ev){
布尔响应;
开关(ev.getAction()){
case MotionEvent.ACTION\u DOWN:
x=ev.getX();
响应=超级接触事件(ev);
打破
case MotionEvent.ACTION\u UP:

response=Math.abs(x-ev.getX())如果您只想通过滑动更改开关的状态,请执行以下操作:

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

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

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

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"

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"

使用button.setClickable(false)但是如果我setClickable(false)我不能拖动开关你可以使用onTouch事件进行拖动…如果我setClickable为false,onTouch事件只获取操作事件使用button.setClickable(false)但是如果我setClickable(false)我无法拖动开关您可以使用onTouch事件进行拖动…如果我将Clickable设置为false,onTouch事件只会使用switch按钮而不是按钮来获取操作\u down Events。我想在单击时禁用change state功能,并且只在拖动事件中使用此功能。您也可以将其用于switch按钮,但问题是相同的,当您u单击该按钮以更改其状态(开->关,关->开),然后进入该功能(在这种情况下为onToggleClicked)。我想防止/消除单击时的更改状态我使用的是切换按钮,而不是按钮。我想禁用单击时的更改状态功能,只允许在拖动事件中使用此功能。您也可以将此功能用于切换按钮。是的,但问题是相同的,当您单击按钮时,该按钮会更改其状态(开->关,关->开)然后输入该函数(在这种情况下为onToggleClicked)。我想防止/消除clickx上的更改状态未在方法中初始化。在何处初始化x以及将什么作为其默认值?在方法中未初始化x。在何处初始化x以及将什么作为其默认值?