Как создать простой разделитель в новом навигационном экране?

Google представил NavigationView панель в библиотеке поддержки дизайна версии 22.2.0, с помощью которой вы можете легко создать ящик с помощью ресурса меню.

Как создать простую разделительную линию между двумя элементами? Группировка элементов не сработала. Создание секции подпозиций создает разделительную линию, но для этого требуется заголовок, который я не хочу.

Любая помощь будет оценена по достоинству.

Все, что вам нужно сделать, это определить group с уникальным идентификатором , я проверил реализацию, если у группы есть другой идентификатор, это создаст разделитель.

Пример меню, создающий разделитель:

         

создайте drawable_item_bg.xml, как это,

                1                

и добавьте его в NavigationView в качестве приложения: itemBackground = “@ drawable / drawer_item_bg”

  

и вот мы идем … скриншот

Просто добавьте DeviderItemDecoration:

 NavigationView navigationView = (NavigationView) findViewById(R.id.navigation); NavigationMenuView navMenuView = (NavigationMenuView) navigationView.getChildAt(0); navMenuView.addItemDecoration(new DividerItemDecoration(MainActivity.this,DividerItemDecoration.VERTICAL)); 

Это выглядит так:

введите описание изображения здесь

Я думаю, что у меня есть еще лучшее решение проблемы с несколькими проверенными предметами. Используя мой способ, вам не нужно беспокоиться об изменении вашего кода при добавлении новых разделов в ваше меню. Мое меню выглядит так же, как принятое решение, написанное Джаредом, с разницей в использовании andoid: checkableBehavior = ” all ” в группах:

           

Проверяемое поведение «все» позволяет проверять / снимать отдельные элементы по желанию, независимо от того, из какой группы они принадлежат. Вам просто нужно сохранить последний проверенный элемент меню. Java-код выглядит следующим образом:

 private MenuItem activeMenuItem; @Override public boolean onNavigationItemSelected(MenuItem menuItem) { // Update selected/deselected MenuItems if (activeMenuItem != null) activeMenuItem.setChecked(false); activeMenuItem = menuItem; menuItem.setChecked(true); drawerLayout.closeDrawers(); return true; } 

Создание разных групп, таких как ответ Нилеша, делает разделитель между ними. Но создает проблему с двумя проверенными элементами в навигационном ящике.

Простым способом, как я это делал, было:

  public boolean onNavigationItemSelected(final MenuItem menuItem) { //if an item from extras group is clicked,refresh NAV_ITEMS_MAIN to remove previously checked item if (menuItem.getGroupId() == NAV_ITEMS_EXTRA) { navigationView.getMenu().setGroupCheckable(NAV_ITEMS_MAIN, false, true); navigationView.getMenu().setGroupCheckable(NAV_ITEMS_EXTRA, true, true); }else{ navigationView.getMenu().setGroupCheckable(NAV_ITEMS_MAIN, true, true); navigationView.getMenu().setGroupCheckable(NAV_ITEMS_EXTRA, false, true); } //Update highlighted item in the navigation menu menuItem.setChecked(true); } 

Мне нужны разделители выше первого элемента и после последнего элемента. Используя решение @Nilesh, мне пришлось добавить фиктивные пункты меню и установить включенное значение false, которое было действительно грязным. Плюс, что делать, если я хочу делать другие интересные вещи в моем меню?

Я заметил, что NavigationView расширяет FrameLayout, поэтому вы можете поместить в него свой собственный контент так же, как и для FrameLayout. Затем я устанавливаю пустое меню xml, чтобы он отображал только мой собственный макет. Я понимаю, что это, вероятно, идет вразрез с тем путем, по которому Google хочет, чтобы мы взяли его, но если вы хотите действительно настраиваемое меню, это простой способ сделать это.

                  

Вот стиль

  

И ansible

      

И меню

    

редактировать:

Вместо кнопок вы можете использовать TextView с возможностью рисования, который имитирует исходные элементы меню:

   // style.xml  

Я не уверен, что это исправлено в API 26 (Android 8) или это было возможно все время. Я по-прежнему новичок в программировании на Android. Однако я добавил родительские группы, как показано ниже. Тестирование на физическом телефоне Android 6,

  1. У меня есть разделитель
  2. Выбор любого элемента из nav_g1 или nav_g2 выбор других элементов.
  3. Не добавлено дополнительное дополнение из-за вложенных групп.
  4. Я не добавлял Java код к слушателям

Код меню

                    

Заметки

  1. Как упоминалось в этом ответе, каждая группа должна иметь уникальный идентификатор, чтобы показать разделитель.
  2. В соответствии с этим ответом пробелы соответствуют спецификациям дизайна Google.
  3. android:checkableBehavior="single" для родительской группы, поэтому проблема с несколькими выбранными пунктами меню в этом ответе (упомянутая в комментариях hungryghost) не происходит

И вот скриншот

Снимок экрана экрана устройства

Вы можете легко добавлять разделители, установив Background Item Item через XML, используя app:itemBackground

  

И используйте LayerDrawable в качестве фона. Он сохраняет наложение слоя наложения материала на клики.

                   

Результат:

введите описание изображения здесь

Кредит должен пойти в Zorawar для решения, Извините за дублирование ответа, но не смог добавить так много форматированного текста в комментарии.

Решение Zorawar работает, код может быть улучшен как таковой:

 public void onNavigationItemSelected(int groupId) { //if an item from extras group is clicked,refresh NAV_ITEMS_MAIN to remove previously checked item navigationView.getMenu().setGroupCheckable(NAV_ITEMS_MAIN, (groupId == NAV_ITEMS_MAIN), true); navigationView.getMenu().setGroupCheckable(NAV_ITEMS_EXTRA, (groupId == NAV_ITEMS_EXTRA), true); //Update highlighted item in the navigation menu menuItem.setChecked(true); } 

Ответ Ниле прав, за исключением того, что у него есть один недостаток двойной проверки.

          

Поэтому использование

андроид: checkableBehavior = “сингл”

с уникальным идентификатором должен решить проблему

Если вы хотите добавить разделитель динамически , вы можете просто добавить пустой SubMenu следующим образом:

 Menu menu = navigationView.getMenu(); menu.addSubMenu(" ").add(" "); 

это добавит разделитель.

просто обязательно перейдите в нужный индекс при использовании menu.getItem(int index)

Interesting Posts

Java EE6> Упаковка JSF facelets (xhtml) и ManagedBeans как JAR

Как я могу предоставить жене аварийный доступ к входам, паролям и т. Д.?

Http Basic Authentication в Java с использованием HttpClient?

Более 20 ГБ дискового пространства пропало?

Назначение переменных с пробелом после знака (=)?

OpenWRT / DD-WRT / совместимый с томатом Wi-Fi ретранслятор?

Задача Gradle не должна выполняться автоматически

Кластеризация кластеров с помощью Google Maps SDK для iOS?

Статический polymorphism C ++ (CRTP) и использование typedefs из производных classов

Как добавить заголовки ответов на основе типа контента; получение Content-type до того, как ответ будет выполнен

проверьте, существует ли элемент с помощью enable_if

Как обеспечить различные значки приложений для Android для разных типов шаблонов gradle?

Обнаружение взаимоблокировки в Java

Как защитить ваше домашнее WiFi-соединение

Как передать выбранную строку в commandLink внутри dataTable или ui: repeat?

Давайте будем гением компьютера.