スイッチボタンを使用したいのですが、クリック時のステータス変更を無効にしたいので、これをドラッグオプションのみに変更させてください。何もしないようにリスナーを設定しようとしonclick
ますが、ボタンをクリックすると常に状態が変わります。
変更ステータスを無効にすることを知っている人はいますonClick
か?
スイッチボタンを使用したいのですが、クリック時のステータス変更を無効にしたいので、これをドラッグオプションのみに変更させてください。何もしないようにリスナーを設定しようとしonclick
ますが、ボタンをクリックすると常に状態が変わります。
変更ステータスを無効にすることを知っている人はいますonClick
か?
スワイプでスイッチの状態のみを変更したい場合は、次のようにします。
switchbutton = view.findViewById(R.id.switch2);
switchbutton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
switchbutton.setChecked(!switchbutton.isChecked());
}
});
スイッチ ウィジェットを使用して 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;
}
一部のデバイスでは、クリックではなく 3 または 6 ピクセル程度の移動イベントが報告されるため、10 という数値は許容値です。これを使用して制御します。この動きが通常のスイッチ動作を通過するようにします。
x をクラス レベル変数として宣言します。デフォルト値は 0 です。MotionEvent.ACTION_DOWN は常に最初に呼び出されるため、MotionEvent の X 軸に開始値を持つ x があります。
//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());
}
これは私にとってはうまくいきました。私の場合、トグル ボタンをクリックするとサービスにリクエストが送信され、サービスが「OK」と応答した場合、メッセージ ハンドラはトグル ボタンの正しい状態を設定しました。