複雑なトグルボタン(rtlチェックボックス)を作成する必要があります。
LinearLayoutがクリック可能であることを知っており、次の例を見ました
XMLのみでそれを行うことはできますか?
rtlロケールを使用する場合は、チェックボックスとその他のビューを直接交換する必要があります。RTL言語に準拠していることを確認する場合は、JellyBeanに含まれている新しい「start」および「end」パラメーターを使用します(marginLeft/RightおよびmarginRight/Leftの代わりにmarginStartおよびmarginEnd)。ただし、以前のバージョンでその動作が必要な場合は、他のトリックが必要になる場合があります。TextViewはすでにボックスの反対側に完全に移動していることに注意してください。その場合、WRAP_CONTENTを多く使用しないようにしてください。使用すると、位置がずれる可能性があります。
LinearLayoutはクリック可能ですが、チェック可能ではありません。
RTLトグルビューを取得するには、次のようにしました。
押され、チェックされ、デフォルトの状態になる9パスの画像を作成しました。
セレクターを作成しました:
<item android:drawable="@drawable/button1_on" android:state_pressed="true"/>
<item android:drawable="@drawable/button1_selected" android:state_checked="true"/>
<item android:drawable="@drawable/button1_off"/>
3. Buttonを拡張し、Checkableを実装するクラスを作成しました。
public class MyCheckbox extends Button implements Checkable {
private static final int[] CHECKED_STATE_SET = {android.R.attr.state_checked};
private boolean mIsChecked = false;
public MyCheckbox(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public MyCheckbox(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyCheckbox(Context context) {
super(context);
}
@Override
public boolean isChecked() {
return mIsChecked;
}
@Override
public void setChecked(boolean isChecked) {
mIsChecked = isChecked;
}
@Override
public void toggle() {
setChecked(!mIsChecked);
}
@Override
public boolean performClick() {
toggle();
return super.performClick();
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
}
}
同様に、クリック可能なLinearLayoutに実装できます