2013-03-24 113 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