Android: добавить разделитель в меню программно - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь создать подменю, в котором есть 3 группы элементов, которые добавляются в мой код Java, и я хочу, чтобы они были разделены.Это меню xml:

<item
    android:id="@+id/action_search"
    android:orderInCategory="100"
    android:icon="@drawable/ic_menu_search"
    app:showAsAction="always"
    android:title="search"
    app:actionViewClass="android.support.v7.widget.SearchView" />

<item
    android:id="@+id/action_filter"
    android:orderInCategory="110"
    android:icon="@drawable/ic_menu_filter"
    app:showAsAction="always"
    android:title="filter">
    <menu>
        <group android:id="@+id/no_filter"
            android:orderInCategory="101">
       </group>
        <group android:id="@+id/genre_filters"
            android:orderInCategory="102">
        </group>
        <group android:id="@+id/author_filters"
            android:orderInCategory="103">
       </group>
    </menu>
</item>

И это то, что у меня есть в функции onCreateOptionsMenu:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {

    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(R.menu.search_and_filter_bar, menu);
    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView = (SearchView) searchItem.getActionView();
    searchView.setOnQueryTextListener(this);
    MenuItem filterItem = menu.findItem(R.id.action_filter);
    SubMenu filters = filterItem.getSubMenu();
    current_filter = filters.add(R.id.no_filter,120, Menu.NONE,"All Books");
    filters.add(R.id.genre_filters,121, Menu.NONE,"Fantasy");
    filters.add(R.id.author_filters,122, Menu.NONE,"JK Rowling");
}

От того, как яПонимаете, между группами должна быть автоматически разделительная линия, но это не так.Есть идеи?

Кстати, когда я пробовал некоторые вещи, я добавил некоторые элементы в XML, и они появились над теми, которые я добавляю программно, игнорируя порядок групп.

Спасибо!

1 Ответ

0 голосов
/ 11 июня 2018

Я бы посоветовал настраиваемый диалог с различными вариантами (например).Вы можете создать массив CharSequence с параметрами, которые вы хотите показать там, а затем передать массив в AlertDialog.Builder с методом setItems(CharSequence[], DialogInterface.OnClickListener). Или вы можете использовать свой собственный макет, как и многие примеры в Интернете.

Пример:

CharSequence colors[] = new CharSequence[] {"red", "green", "blue", "black"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(colors, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // the user clicked on colors[which]
    }
});
builder.show();

Затем вы можете показать это меню в любой позиции, а также в меню.

...