Почему использование DrawerLayout дает IllegalArgumentException: DrawerLayout необходимо измерять с помощью MeasureSpec.EXACTLY

Ниже приведен мой xml:

<?xml version="1.0" encoding="utf-8"?> <layout> <android.support.v4.widget.DrawerLayout 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/root_drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="tailamade.boop.CustomerHomeActivity" tools:openDrawer="start"> <include layout="@layout/content_customer_home" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/navigationView" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:headerLayout="@layout/activity_main" app:menu="@menu/menu_customer_home" /> </android.support.v4.widget.DrawerLayout> </layout> 

Я также пробовал написать свой собственный CustomDrawerLayout так (без везения):

 class CustomDrawerLayout : DrawerLayout { constructor(context: Context) : super(context) constructor(context: Context, attrs: AttributeSet) : super(context, attrs) constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { var widthMeasureSpec = widthMeasureSpec var heightMeasureSpec = heightMeasureSpec widthMeasureSpec = MeasureSpec.makeMeasureSpec( MeasureSpec.getSize(widthMeasureSpec), MeasureSpec.EXACTLY) heightMeasureSpec = MeasureSpec.makeMeasureSpec( MeasureSpec.getSize(heightMeasureSpec), MeasureSpec.EXACTLY) super.onMeasure(widthMeasureSpec, heightMeasureSpec) } 

}

Я видел другие сообщения об этом исключении, но «решения» не работают. В чем проблема?

    Ширина должна быть указана в dpi, а не «wrap_content» (см. Документацию к навигационному ящику)

    • Вид ящика указывает его ширину в единицах dp, а высота соответствует родительскому виду. Ширина ящика должна быть не более 320dp, поэтому пользователь всегда может видеть часть основного содержимого

    РЕДАКТИРОВАНИЕ Насколько вы относитесь к классу вашего ребенка, дает ли она такую ​​же ошибку? Я предполагаю, что когда вычисляется размер «wrap_content», фактическая ширина недействительна (возможно, равна нулю). Вы должны проверить ширину в onMeasure и убедиться, что она находится в пределах (больше нуля, существенно меньше, чем ширина родителя, чтобы все еще можно было видеть, когда ящик открыт).