【问题标题】:Toggle button with radio button behaviour具有单选按钮行为的切换按钮
【发布时间】:2018-09-25 04:47:43
【问题描述】:

我在相对布局中有一组切换按钮。

用户一次只能选择一个切换按钮。

我尝试了以下link,但它们似乎都不起作用。

知道如何实现这一点吗?

【问题讨论】:

  • 你做了什么显示代码sn-p

标签: android radio-button togglebutton radio-group android-togglebutton


【解决方案1】:

它不起作用可能是因为所有 RadioButtons 没有分组在一起,因为它们之间有一些 View。

RadioButton 应该是 RadioGroup 的直接子级,否则分组不起作用。

【讨论】:

    【解决方案2】:

    用户一次只能选择一个切换按钮。

    在您给定链接上选定的answer 中可用的代码正在做同样的工作。为了可视化这一点,请更改一些代码。

    在 XML 中

    在 ToggleButton 中,将 android:textOnandroid:textOff 更改为“on”和“off”(仅作为示例)。您的 XML 文件应如下所示:

    <RadioGroup android:id="@+id/toggleGroup"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:orientation="horizontal"
        >
    
        <ToggleButton android:id="@+id/btn1"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:textSize="14sp"
            android:textOn="on"
            android:textOff="off"
            android:onClick="onToggle"
            android:checked="true"
            />
        <ToggleButton android:id="@+id/btn2"
            android:layout_height="wrap_content"
            android:layout_width="fill_parent"
            android:layout_weight="1"
            android:textSize="14sp"
            android:textOn="on"
            android:textOff="off"
            android:checked="false"
            android:onClick="onToggle"
            />
    </RadioGroup>
    

    这应该是这样的:

    在 Java 文件中

    在您的活动中,编写以下代码:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ((RadioGroup) findViewById(R.id.toggleGroup)).setOnCheckedChangeListener(ToggleListener);
    }
    
    static final RadioGroup.OnCheckedChangeListener ToggleListener = new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(final RadioGroup radioGroup, final int i) {
            for (int j = 0; j < radioGroup.getChildCount(); j++) {
                final ToggleButton view = (ToggleButton) radioGroup.getChildAt(j);
                view.setChecked(view.getId() == i);
            }
        }
    };
    
    public void onToggle(View view) {
        ((RadioGroup)view.getParent()).check(view.getId());
        // write your specific code here ..
        Toast.makeText(this, "Toggle button clicked", Toast.LENGTH_SHORT).show();
    }
    

    当您在另一个(切换按钮)处于“开启”状态时单击“关闭”,“关闭”将变为“开启”,反之亦然。因此用户一次只能选择一个切换按钮。如果一个切换按钮处于打开状态,则另一个将始终处于关闭状态。

    【讨论】:

    • 这是我的错。删除它。
    • 这个答案有帮助吗?请重新考虑您的投票。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-13
    • 2020-05-20
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多