切换按钮 – 禁用滑动function

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

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

[在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]

     

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

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

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

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

查看Switch的实现,了解拖动的工作原理。 它太酷了!

要禁用Switch,请使用以下方法

 switchBtn.setEnabled(false); 

使开关不可点击使用

 switchBtn.setClickable(false); 

其中switchBtn是Switch对象

我的解决方案是:

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

或ButterKnife:

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

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

 @Override public boolean onTouchEvent(MotionEvent ev) { boolean handle = ev.getActionMasked() == MotionEvent.ACTION_MOVE; return handle ? handle : super.onTouchEvent(ev); } 

它应该工作。

//此代码工作正常

公共类MainActivity扩展AppCompatActivity实现CompoundButton.OnCheckedChangeListener {Switch 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; } } 

}