Android - 如何将单选按钮添加到导航抽屉
Android - How to add Radio Buttons to a Navigation Drawer
我正在尝试向导航抽屉添加一些单选按钮。
到目前为止,这是我一直在尝试的:
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>
参考 and 个答案。
方法一:创建单选按钮后添加单选组
这可能吗?
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);
}
但它给出了一个错误:
The specified child already has a parent. You must call removeView()
on the child's parent first.
但是我不知道怎么称呼它
方法 2:动态添加单选按钮到导航抽屉
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
这只是假设,我不知道这是否可能。
- 复制所有
radio_buttons
的实例并存储在一些 RadioButton[]
数组中。
- 删除组(如方法 2 中所述)
- 创建一个
RadioGroup
,并将所有 RadioButtons[]
添加到其中。
- 将这个新的
RadioGroup
添加到 navigationView
但是 none 很有帮助。请告诉我该怎么做?
您可以在菜单抽屉中添加单选按钮。首先创建一个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>
我正在尝试向导航抽屉添加一些单选按钮。 到目前为止,这是我一直在尝试的: 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>
参考
方法一:创建单选按钮后添加单选组
这可能吗?
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);
}
但它给出了一个错误:
The specified child already has a parent. You must call
removeView()
on the child's parent first.
但是我不知道怎么称呼它
方法 2:动态添加单选按钮到导航抽屉
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
这只是假设,我不知道这是否可能。
- 复制所有
radio_buttons
的实例并存储在一些RadioButton[]
数组中。 - 删除组(如方法 2 中所述)
- 创建一个
RadioGroup
,并将所有RadioButtons[]
添加到其中。 - 将这个新的
RadioGroup
添加到navigationView
但是 none 很有帮助。请告诉我该怎么做?
您可以在菜单抽屉中添加单选按钮。首先创建一个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>