2014-01-20 107 views
1

我想要使用switch button,但我希望在点击时禁用更改状态,让此更改仅适用于拖动选项。我试图设置onclick监听器什么也不做,但是当我点击按钮时总是改变状态。切换按钮,禁用更改状态onClick

有人知道禁用更改状态onClick?使用的

+0

使用button.setClickable(假) –

+0

但是,如果我setclickable(假)我不能拖开关 – bott

+0

你可以使用onTouch事件拖动... –

回答

0

Toggle Button代替在java类

ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton); 
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
     if (isChecked) { 
      // The toggle is enabled 
     } else { 
      // The toggle is disabled 
     } 
    } 
}); 
+0

Im使用切换按钮不是一个按钮。我想禁用点击更改状态功能,只让这个功能拖动事件 – bott

+0

你可以使用它的开关按钮也 – kId

+0

是的,但问题是一样的,当你点击按钮,按钮改变她的状态(on- > off,off-> on),然后输入该函数(onToggleClicked在这种情况下)。我想要防止/消除点击更改状态 – bott

0
//onClickListener 
public void tglOnClick(View v) { 
    ToggleButton tgl = (ToggleButton) v; 

    //do something based on toggle status after clicking 
    if (tgl.isChecked()) 
     //do something 
    else 
     //do something else 

    //revert button state so that it can be controlled by some external logic 
    tgl.setChecked(!tgl.isChecked()); 

}

Button

XML用于切换按钮

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

为我工作。在我的情况下,点击切换按钮向服务发送请求,如果服务回复“OK”,则消息处理器设置切换按钮的正确状态。

1

使用开关部件,你将不得不创建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; 
} 

数字10是一个公差值,因为一些设备报告运动事件3或6像素左右,而不是点击,所以这个你控制:10像素或更少的点击(并忽略它)或更多的距离被认为是运动,让这个运动通过正常开关行为。

0

如果你想只刷卡更改执行以下操作开关的状态:

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