2017-05-31 200 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