切换button – 禁用滑动function

我有一个switchbutton(实际上是一个自定义的),我想禁用刷卡function出于某种原因; 我希望用户只能点击它。 有没有办法做到这一点? 谢谢。

Solutions Collecting From Web of "切换button – 禁用滑动function"

您可以将SwitchClickable(false)设置为Switch,然后监听Switch父节点中的onClick()事件并以编程方式切换。 开关仍将显示为启用,但滑动animation不会发生。

[在onCreate()]

 Switch _Switch_Internet = (Switch) findViewById(R.id.m_switch_internet); _Switch_Internet.setClickable(false); 

[点击监听者]

 public void ParentLayoutClicked(View _v){ Switch _Switch_Internet = (Switch) findViewById(R.id.m_switch_internet); if(_Switch_Internet.isChecked()){ _Switch_Internet.setChecked(false); } else{ _Switch_Internet.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/m_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> 

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

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

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

然后,您可以根据需要自由设置交换机上的点击监听器。

查看Switch的实现,看看如何拖动工作。 它太酷了!

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

 switchBtn.setEnabled(false); 

使开关不能点击使用

 switchBtn.setClickable(false); 

其中switchBtn是Switch对象

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

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

它应该工作。

我的解决scheme是:

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

或黄油刀:

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

//这段代码工作正常

公共类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; } } 

}