【问题标题】:3 state switch button? [closed]3状态切换按钮? [关闭]
【发布时间】:2017-10-31 22:39:22
【问题描述】:

要求是像这样实现一个三向切换按钮..

[插入无状态开关]

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

有人用过/知道如何处理这种情况吗?

【问题讨论】:

  • 使用自定义搜索栏。或者,使用两个开关,其中 A 开关的一种状态将启用 B 开关。
  • @AlphaQ 我会尝试搜索栏的想法。谢谢。
  • 好问题... 标记为太宽泛?什么鬼?
  • 你有解决办法吗?

标签: android button android-button


【解决方案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();
}

} 

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2020-09-20
  • 1970-01-01
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多