Google представил NavigationView
в Библиотеке поддержки дизайна версию 22.2.0, с помощью которой вы можете очень легко создать ящик, используя ресурс меню.
Как я могу создать простую разделительную линию между двумя элементами? Группировка предметов не сработала. Создание раздела подэлементов создает разделительную линию, но требует заголовка, который мне не нужен.
Любая помощь будет оценена.
Ответы:
Все, что вам нужно сделать, это определить
group
с уникальным идентификатором. Я проверил реализацию, если группа имеет разные идентификаторы, это создаст разделитель.Пример меню, создающего разделитель:
источник
setChecked
, что он работает на уровне группы. Если вы выберите элемент в группе A, затем снова откройте ящик и выберите элемент в группе B, оба элемента останутся выделенными. Возможно, Google исправит это поведение в следующем выпуске, но сейчас это недостаток использования нескольких групп с NavigationView.android:checkableBehavior="none"
для вашей второй группы (это действия, а не навигация, я полагаю)group
него, он будет скомпилирован и запущен, но разделители скрыты.создайте drawableite_itm_bg.xml вот так,
и добавьте его в NavigationView как приложение: itemBackground = "@ drawable / box_item_bg"
и здесь мы идем...
источник
navMenuView.addItemDecoration(new DividerItemDecoration(NavigationViewActivity.this, DividerItemDecoration.VERTICAL));
для идеальной границы предметаПросто добавьте DeviderItemDecoration:
Это выглядит так:
источник
addItemDecoration
линии до 1px?Вы можете легко добавить разделители, установив фон меню с помощью XML, используя
app:itemBackground
И используйте LayerDrawable в качестве фона. Это сохраняет дизайн материала наложения пульсаций для кликов.
Результат:
источник
Я думаю, что у меня есть еще лучшее решение проблемы нескольких проверенных пунктов. Используя мой способ, вам не нужно беспокоиться об изменении кода при добавлении новых разделов в ваше меню. Мое меню выглядит так же, как принятое решение, написанное Джаредом, с разницей в использовании andoid: checkableBehavior = " all " для групп:
CheckableBehavior 'all' позволяет проверять / снимать флажки с отдельных элементов по желанию, независимо от того, к какой группе они принадлежат. Вам просто нужно сохранить последний проверенный пункт меню. Java-код выглядит так:
источник
Создание разных групп, таких как ответ Нилеша, делает разделитель между ними, но создает проблему двух проверенных элементов в навигационном ящике.
Простой способ, как я справился с этим, был:
источник
android:checkableBehavior="none"
Я не уверен, исправлено
API 26 (Android 8)
ли это или это было возможно все время. Я все еще новичок в программировании Android. Однако я добавил родительские группы, как показано ниже. Тестирование на физическом телефоне Android 6,nav_g1
илиnav_g2
отменяет выбор других элементов.Java
код для слушателейКод меню
Ноты
android:checkableBehavior="single"
родительской группы является обязательным, поэтому проблема нескольких выбранных пунктов меню в этом ответе (упомянутых в комментариях Hungryghost) не возникаетИ вот скриншот
источник
Я хотел разделители над первым пунктом и после последнего элемента. Используя решение @Nilesh, я должен был добавить фиктивные пункты меню и установить значение false, что было очень грязно. Плюс, что если я захочу сделать другие интересные вещи в моем меню?
Я заметил, что NavigationView расширяет FrameLayout, так что вы можете поместить в него свой собственный контент, как если бы вы использовали FrameLayout. Затем я установил пустое меню xml, чтобы оно показывало только мой пользовательский макет. Я понимаю, что это, вероятно, идет вразрез с тем, как Google хочет, чтобы мы пошли по нему, но если вы хотите действительно индивидуальное меню, это простой способ сделать это.
Вот стиль
И рисовать
И меню
редактировать:
Вместо кнопок вы можете использовать TextView с drawable, который имитирует внешний вид оригинальных пунктов меню:
источник
Автор должен отдать должное Zorawar за решение, извините за дублирование ответа, но не смог добавить столько отформатированного текста в комментарии.
Решение Zorawar работает, код может быть улучшен как таковой:
источник
Ответ Ниле верен, за исключением того, что у него есть один недостаток двойной проверки.
Итак, используя
с уникальным идентификатором решит проблему
источник
Если вы хотите добавить разделитель динамически , вы можете просто добавить пустое SubMenu следующим образом:
это добавит разделитель.
просто обязательно передайте правильный индекс при использовании
menu.getItem(int index)
источник
В дополнение к предыдущим ответам, если вы хотите использовать декоративные разделители, но не хотите создавать несколько групп из-за проблем с «проверяемым поведением», вы можете назначить один и тот же идентификатор группы всем своим группам.
Пример:
источник
Если выбранный ответ не работает для вас, вы можете попробовать добавить его
onCreateOptionsMenu
в дополнение, чтобы дать уникальный идентификатор группы:источник