切换线性布局

时间:2013-03-24 09:13:37

标签: android android-layout custom-controls

我需要创建一个复杂的切换按钮(rtl复选框)。

我知道LinearLayout可以点击,我看到了以下example

我可以通过XML完成吗?

2 个答案:

答案 0 :(得分:1)

使用rtl语言环境时,应直接交换复选框和其他视图。 如果您想确保符合RTL语言,请使用新的“start”& JellyBean中包含的“end”参数(marginStart& marginEnd而不是marginLeft / Right& marginRight / Left)。虽然如果您需要以前版本的行为,您可能需要其他技巧。 请注意,TextView将完全移动到框的另一侧:确保在这种情况下不使用大量WRAP_CONTENT,这可能会导致错位。

答案 1 :(得分:1)

LinearLayout可以点击但不能检查 要获得RTL切换视图,我执行了以下操作:

  1. 我创建了一个九路径图像,用于按下,检查和默认状态。

  2. 创建了一个选择器:

  3. <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和Implements 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上实现