Я пытаюсь создать ящик с заголовком и некоторыми пунктами меню.Я создал заголовок как отдельный макет и поместил его в NavigationView следующим образом:
<com.google.android.material.navigation.NavigationView
android:id="@+id/navView"
android:layout_width="312dp"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/nav_header"
app:menu="@menu/menu_drawer">
Заголовок отображается правильно.Проблема в том, что по умолчанию меню не настраивается.Поэтому я помещаю атрибут app:actionLayout="@layout/nav_menu_item"
для каждого элемента в меню, например:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<group>
<item android:id="@+id/navDocumentScanItem"
app:actionLayout="@layout/nav_menu_item"
android:title="@null"/>
<item android:id="@+id/navReportItem"
app:actionLayout="@layout/nav_menu_item"
android:title="@null"/>
<item android:id="@+id/navHallOfFameItem"
app:actionLayout="@layout/nav_menu_item"
android:title="@null"/>
</group>
В моем nav_menu_item у меня есть макет, который я хочу использовать для каждого элемента вМеню моего ящика:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/navItem"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="56dp">
<ImageView
android:id="@+id/navItemIcon"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginTop="6dp"
android:layout_marginStart="8dp"
android:layout_width="44dp"
android:layout_height="44dp"
tools:src="@drawable/nav_icon_qr_scan"/>
<TextView
android:id="@+id/navItemText"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/navItemIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/menu_item_text_style"
tools:text="Document Scanning"/>
</androidx.constraintlayout.widget.ConstraintLayout>
Это выглядит довольно хорошо (если я жестко его кодирую), но проблема в том, что я не могу получить доступ к представлениям в этом пользовательском макете.Как получить дескриптор «navItemIcon» и «navItemText», чтобы я мог установить значок и текст программно, в зависимости от того, какая позиция элемента для этого конкретного элемента?Мне нужно изменить их при запуске упражнения, чтобы установить правильный источник текста и значков.
Спасибо!