【问题标题】:Android - How to add Radio Buttons to a Navigation DrawerAndroid - 如何将单选按钮添加到导航抽屉
【发布时间】:2018-11-11 13:51:13
【问题描述】:

我正在尝试将一些单选按钮添加到导航抽屉。 这是我迄今为止一直在尝试的: activity_main_drawer.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:showIn="navigation_view">

    <group
        android:id="@+id/radio_button_group"
        android:checkableBehavior="single"
        android:visible="true">
        <item
            android:id="@+id/radio_buttonX-axis"
            android:icon="@drawable/ic_x_axis"
            android:title="Show x-axis"
            app:actionViewClass="android.widget.RadioButton"/>
        <item
            android:id="@+id/radio_buttonY-axis"
            android:icon="@drawable/ic_y_axis"
            android:title="Show y-axis"
            app:actionViewClass="android.widget.RadioButton" />
        <item
            android:id="@+id/radio_buttonZ-axis"
            android:icon="@drawable/ic_z_axis"
            android:title="Show z-axis"
            app:actionViewClass="android.widget.RadioButton" />
    </group>
</menu>

参考thisthis 的答案。

方法一:在单选按钮创建后添加单选组

这可能吗?

int[] ids = {R.id.radio_buttonX_axis, R.id.radio_buttonY_axis, R.id.radio_buttonZ_axis};
RadioGroup radioGroup = new RadioGroup(navigationView.getContext());
radioGroup.setOrientation(RadioGroup.VERTICAL);
for (int id : ids) {
    MenuItem menuItem = navigationView.getMenu().findItem(id);
    RadioButton radioButton = (RadioButton) menuItem.getActionView();
    radioGroup.addView(radioButton);
}

但它给出了一个错误:

指定的孩子已经有一个父母。您必须致电removeView() 首先是孩子的父母。

但我不知道怎么称呼它

方法二:动态添加单选按钮到导航抽屉

navigationView.getMenu().removeGroup(R.id.radio_button_group);
RadioGroup radioGroup = new RadioGroup(navigationView.getContext());
for (int i = 0; i < 3; i++) {
    RadioButton radioButton = new RadioButton(navigationView.getContext());
    radioButton.setText("Show X - Axis");
    radioGroup.addView(radioButton);
}
navigationView.addView(radioGroup);

但它没有按预期工作(见图)。

我尝试将radioGroup 添加到Menu,但我也不知道该怎么做。这就是我想要做的:

Menu testMenu = navigationView.getMenu();
testMenu.add(R.id.radio_button_group, testMenu.findItem(R.id.radio_buttonX_axis).getActionView().getId(), 1, "Show X - Axis");

但它只是为NavigationDrawer 添加了一个选项,而不是单选按钮。

方法3

这只是假设,我什至不知道这是否可能。

  1. 复制所有radio_buttons 的实例并存储在某个RadioButton[] 数组中。
  2. 删除组(如方法 2 中所做的那样)
  3. 创建一个RadioGroup,并将所有RadioButtons[] 添加到其中。
  4. 将此新的RadioGroup 添加到navigationView

但没有任何帮助。请告诉我该怎么做?

【问题讨论】:

    标签: android radio-button navigation-drawer radio-group


    【解决方案1】:

    您可以在菜单抽屉中添加单选按钮。首先创建一个xml布局(radio_button.xml):

     <RadioGroup android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       xmlns:android="http://schemas.android.com/apk/res/android">
    
        <RadioButton
            android:id="@+id/radioButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="RadioButton" />
    
        <RadioButton
            android:id="@+id/radioButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="RadioButton" />
    </RadioGroup>
    

    然后将其添加到抽屉中:

      <item android:title="Radios">
        <menu>
            <item
                app:actionLayout="@layout/radio_button"
                android:id="@+id/nav_radios"
                android:title=""
                />
    
        </menu>
     </item>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-12
      相关资源
      最近更新 更多