3 状态开关按钮?

Zx5*_*Zx5 6 android button android-button

要求是实现一个像这样的 3 路开关按钮..

转变

是的

[无状态插入开关]

几乎在我检查的所有地方,只有 2 态切换按钮,我发现的唯一 3 向选项是切换。

任何人都使用过/知道如何解决这种情况?

Ege*_*glu 1

  • 您必须定义一个扩展 Checkbox 的类

  • 定义检查状态变量

  • 重写 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();
}

} 
Run Code Online (Sandbox Code Playgroud)

  • 我已经在这里找到了这个答案。/sf/answers/2865755721/ 无论如何谢谢 (2认同)