У меня есть DrawerLayout
, в котором вторым дочерним элементом является NavigationView
, который содержит содержимое NavigationDrawer
.
Когда я запускаю проект, открывая ящик, содержимое NavigationView
перекрывает вид заголовка, установленный для NavigationView
.
Деятельность построена следующим образом:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer_main_layout">
<android.support.design.widget.CoordinatorLayout>
<!-- contents of activity-->
</android.support.design.widget.CoordinatorLayout>
<!-- nav drawer -->
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view_drawer"
android:orientation="vertical"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start">
<RelativeLayout
android:id="@+id/drawer_body"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/navigation_drawer_header_height"
></RelativeLayout>
</android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
В действии я программно устанавливаю представление заголовка. Я должен сделать это, потому что заголовок и тело навигации будут меняться в течение жизненного цикла приложения.
LayoutInflater inflator = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
RelativeLayout headerView = new RelativeLayout(this);
View mHeadernav = inflator.inflate(resourceViewId,headerView);
mNavigationView.addHeaderView(mHeadernav);
Содержимое дочернего элемента NavigationView
добавляется таким же образом, вызывая addView(View)
для объекта RelativeLayout
.
Обходной путь: чтобы обойти эту проблему, я установил значение в ресурсах (@dimen/header_view_height
) и использую его, чтобы указать высоту моего представления заголовка и как marginTop содержимого NavigationView
дочернего элемента.
Еще один обходной путь, о котором я думал, — создать отдельное представление и использовать его как представление заголовка. В этом случае RelativeLayout
(дочерний элемент NavView) будет иметь двух дочерних элементов, первый будет заголовком, второй — содержимым.
Я знаю, что NavigationView
работает так же, как FrameLayout
, но есть ли способ сделать контент последовательно размеченным, как в LinearLayout
, с помощью пользовательских представлений?
LinearLayout
для вашего ящика? Не похоже, что вы используетеNavigationView
для чего-то, что не может быть легко воспроизведено с помощьюLinearLayout
. - person Mike M.   schedule 20.09.2016