2013-03-24 117 views
1

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

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

我能做到这一点只通过XML?

回答

1

LinearLayout可以点击但不可检查。
要获得RTL切换视图我做了以下内容:

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

  2. 创建的选择:

    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; 
    } 
    
    } 
    

    以同样的方式:

<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.Created扩展按钮和器具可勾选类一世t可以在可点击的LinearLayout上实现

1

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

+0

我需要支持较低版本,背景右侧包含图像(九个补丁),文本必须位于左侧。 – NickF 2013-03-24 09:37:19

+0

我的方法是使用TextView并根据语言以编程方式设置drawable。 textView.setCompoundDrawables(rtlLanguage?null:drawable,null,rtlLanguage?drawable:null,null); – 2013-03-24 09:41:03