2017-05-31 247 views
-1

要求是實現這樣一個三路開關按鈕..3狀態切換按鈕?

switch

yes

[插入交換機無狀態]

幾乎無處不在我查過,只是有2狀態開關按鈕和我發現的唯一3路選項是切換。

任何人都已經使用/知道如何解決這種情況?

+0

使用自定義的搜索條。或者,使用兩個開關,其中A開關的一個狀態將啓用B開關。 – AlphaQ

+0

@AlphaQ我會嘗試一下seekbar的想法。謝謝。 – Zx5

回答

1
  • 你必須限定延伸複選框

  • 限定用於檢查狀態變量

  • 覆蓋所述的onClick或的oncheck方法來改變3個狀態之間可變代替撥動器isChecked的類變量。

static private final int CHECKED = 1; 
 
private int state; 
 

 
public CheckBoxTriStates(Context context) { 
 
    super(context); 
 
    init(); 
 
} 
 

 
public CheckBoxTriStates(Context context, AttributeSet attrs) { 
 
    super(context, attrs); 
 
    init(); 
 
} 
 

 
public CheckBoxTriStates(Context context, AttributeSet attrs, int defStyleAttr) { 
 
    super(context, attrs, defStyleAttr); 
 
    init(); 
 
} 
 

 
private void init() 
 
{ 
 
    state = UNKNOW; 
 
    updateBtn(); 
 

 
    setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
 

 
     // checkbox status is changed from uncheck to checked. 
 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
 
     { 
 
      switch (state) 
 
      { 
 
       case UNKNOW: 
 
        state = UNCHECKED; 
 
        break; 
 
       case UNCHECKED: 
 
        state = CHECKED; 
 
        break; 
 
       case CHECKED: 
 
        state = UNKNOW; 
 
        break; 
 
      } 
 
      updateBtn(); 
 
     } 
 
    }); 
 

 
} 
 

 
private void updateBtn() 
 
{ 
 
    int btnDrawable = R.drawable.ic_checkbox_indeterminate_black; 
 
    switch (state) 
 
    { 
 
     case UNKNOW: 
 
      btnDrawable = R.drawable.ic_checkbox_indeterminate_black; 
 
      break; 
 
     case UNCHECKED: 
 
      btnDrawable = R.drawable.ic_checkbox_unchecked_black; 
 
      break; 
 
     case CHECKED: 
 
      btnDrawable = R.drawable.ic_checkbox_checked_black; 
 
      break; 
 
    } 
 
    setButtonDrawable(btnDrawable); 
 

 
} 
 
public int getState() 
 
{ 
 
    return state; 
 
} 
 

 
public void setState(int state) 
 
{ 
 
    this.state = state; 
 
    updateBtn(); 
 
} 
 

 
}

+1

我已經在這裏找到了這個答案。 https://stackoverflow.com/a/40939367/8090658 謝謝你 – Zx5