2014-01-20 2 views
1

switch button을 사용하고 싶지만 클릭시 변경 상태를 비활성화하려면이 옵션을 드래그 옵션으로 만 변경하십시오. onclick 리스너를 설정하려고 시도하지만 아무 때나 버튼을 클릭하면 항상 상태가 변경됩니다.전환 버튼, 변경 상태 비활성화 on

변경 상태를 비활성화 하시겠습니까? onClick?

+0

사용 button.setClickable –

+0

하지만 난 내가 스위치를 끌어 캔트 (false)를 setclickable 경우 – bott

+0

당신은 드래그를위한 onTouch 이벤트를 사용할 수 있습니다 ... –

답변

0

사용 Toggle Button 대신 자바 클래스

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

버튼을 사용하지 않고 스위치 버튼을 사용하여. 클릭 상태에서 변경 상태 기능을 비활성화하고 끌기 이벤트에서만이 기능을 사용하려고합니다. – bott

+0

u는 스위치 버튼에도 사용할 수 있습니다. – kId

+0

그래, 문제는 단추가 자신의 상태를 변경하는 단추를 클릭 할 때 동일합니다. > 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()); 

}

이을의 토글 버튼

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

에 대한 Button

XML의 나를 위해 일했다. 내 경우 토글 버튼을 클릭하면 서비스에 요청이 전송되고 서비스가 "OK"로 응답하면 메시지 핸들러가 토글 버튼의 ​​올바른 상태를 설정합니다. 일부 장치는 움직임을보고으로

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)는 공차 값은 다음과 같습니다

1

당신은 당신이 클릭을 감지 할 때 customSwitch 클래스를 생성하고 true를 반환하는 onTouchEvent 메소드를 오버라이드 (override) 할 필요가 스위치 위젯을 것이다 사용 3 픽셀 또는 6 픽셀 정도의 클릭 이벤트가 발생하면이를 제어합니다. 10 픽셀 이하는 클릭 (무시)되거나 더 먼 거리가 움직임으로 간주되어이 움직임이 정상적인 스위치 동작을 통과하게합니다. 당신은 단지 다음을 수행 슬쩍으로 스위치의 상태를 변경하려면

0

: (false)를

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