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