2017-05-31 12 views
-1

要件は、このような3ウェイスイッチボタンを実装するために..です3状態切り替えボタン?ほとんどどこでも私がチェック

switch

yes

[無状態で挿入スイッチ]

、唯一ありました2状態切り替えボタンと私が見つけた唯一の3方向オプションはトグルでした。

誰もがこの状況に対処する方法を知っていますか?

+0

カスタムシークバーを使用してください。または、Aスイッチの1つの状態がBスイッチを有効にする2つのスイッチを使用します。 – AlphaQ

+0

@AlphaQシークバーのアイデアを試してみます。ありがとう。 – Zx5

答えて

1
  • あなたは

  • するにisCheckedを切り替えるのではなく、3つの状態の間でその変数を変更するには、チェック状態のための変数

  • オーバーライドのonClickやoncheckのメソッドを定義するチェックボックスを拡張するクラスを定義する必要があります変数。

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

関連する問題