Android - Как добавить радиокнопки в навигационный ящик - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь добавить несколько переключателей в навигационный ящик. Это то, что я пытался до сих пор: 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>

Ссылка это и это ответы.

Способ 1. Добавление группы радиосвязи после создания кнопок радиосвязи

Это вообще возможно?

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() сначала на родителя ребенка.

Но я не смог понять, как это назвать

Метод 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);

Но он работает не так, как ожидалось (см. Рисунок).

Improper Radio Buttons

Я пытался добавить 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

Но никто не помог. Подскажите пожалуйста что делать?

1 Ответ

0 голосов
/ 11 ноября 2018

Вы можете добавить радиокнопки в меню.Сначала создайте макет 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>
...