切换按钮 - 禁用滑动功能

时间:2012-12-10 16:39:30

标签: android

我有一个switch按钮(实际上是自定义按钮),我想出于某种原因禁用滑动功能;我希望用户只能点击它。有没有办法实现这个目标? 感谢。

6 个答案:

答案 0 :(得分:36)

您可以将setClickable(false)设置为Switch,然后在Switch的父级中侦听onClick()事件并以编程方式切换它。该开关仍然会显示为启用,但滑动动画不会发生。

...

[在onCreate()]

Switch switchInternet = (Switch) findViewById(R.id.switch_internet);
switchInternet.setClickable(false);

...

[点击听众]

public void ParentLayoutClicked(View v){
    Switch switchInternet = (Switch) findViewById(R.id.switch_internet);

    if (switchInternet.isChecked()) {
        switchInternet.setChecked(false);           
    } else {
        switchInternet.setChecked(true);    
    }       
}

...

[layout.xml]

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:onClick="ParentLayoutClicked"
        android:focusable="false"
        android:orientation="horizontal" >

        <Switch
            android:layout_marginTop="5dip"
            android:layout_marginBottom="5dip"
            android:id="@+id/switch_internet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textOff="NOT CONNECTED"
            android:textOn="CONNECTED"
            android:focusable="false"
            android:layout_alignParentRight="true"                                                
            android:text="@string/s_internet_status" />

    </RelativeLayout>

答案 1 :(得分:19)

更好的方法是阻止Switch类接收MotionEvent.ACTION_MOVE个事件。

这可以通过以下方式完成:

switchButton.setOnTouchListener(new View.OnTouchListener() {
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    return event.getActionMasked() == MotionEvent.ACTION_MOVE;
  }
});

然后您可以根据需要在交换机上自由设置单击侦听器。

查看implementation of Switch以查看拖动的工作原理。这很酷!

答案 2 :(得分:8)

要禁用交换机,请使用以下方法

switchBtn.setEnabled(false);

要使开关无法点击,请使用

switchBtn.setClickable(false);

其中switchBtn是Switch对象

答案 3 :(得分:3)

我的解决方案是:

switchView.setOnTouchListener(new View.OnTouchListener() { 
@Override           
public boolean onTouch(View view, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_UP) {
                            //Your code
                }
                return true;            
    }       
});

Or ButterKnife:

@OnTouch(R.id.switchView)
public boolean switchStatus(Switch switchView, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_UP) {
        // your code
    }
    return true;
}

答案 4 :(得分:2)

您可以自定义一个扩展Switch的视图,然后覆盖它的onTouchEvent()

-moz-height:2em;

它应该有用。

答案 5 :(得分:0)

//此代码工作正常

公共类MainActivity扩展AppCompatActivity实现CompoundButton.OnCheckedChangeListener {     切换my_switch;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    my_switch = (Switch) findViewById(R.id.my_switch);
    my_switch.setOnCheckedChangeListener(this);
}
@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.my_switch:
            if(my_switch.isChecked())
                my_switch.setChecked(true);                
            else           
                my_switch.setChecked(true);
            break;
    }
}

}