То, чего я хочу достичь, - это дизайн материала DrawerLayout
, стоящий за полупрозрачной строкой состояния, такой как:
![DrawerLayout inside translucent status bar](https://i.stack.imgur.com/pAjkH.png)
Я используюnew Компонент архитектуры навигации , что означает, что это моя текущая структура (я сделаю ее простой, поскольку она может содержать много бесполезного кода):
main.xml:
<FrameLayout
...
android:layout_width="match_parent"
android:layout_height="match_parent"
...
android:fitsSystemWindows="true" >
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/main_nav_graph"
app:defaultNavHost="true" />
</FrameLayout>
Затем внутри фрагмента навигационного графика на main.xml
Я загружаю сам DrawerLayout
:
фрагмент_основной_nav.xml:
<androidx.drawerlayout.widget.DrawerLayout
...
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<!-- Layout to contain contents of main body of screen (drawer will slide over this) -->
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
...
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<!-- Container for contents of drawer - using NavigationView to make configuration easier -->
<com.google.android.material.navigation.NavigationView
android:id="@+id/drawer_navigation_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:menu="@menu/drawer_view"
app:headerLayout="@layout/drawer_nav_header"/>
</androidx.drawerlayout.widget.DrawerLayout>
И в моем styles.xml
у меня есть Theme
как:
<style name="AppTheme" parent="WindowAppTheme">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="WindowAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"></style>
И v21 styles.xml
:
<style name="WindowAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
С этим я не могу получить `DrawerLayout, чтобы показать его верхнюю часть под полупрозрачной строкой состояния, вот что я получаю вместо:
![white status bar](https://i.stack.imgur.com/1U0cC.png)
Я пробовал несколько разных способов, помещая android:fitsSystemWindows=true
иудаляя это отовсюду, но я не могу заставить это работать!Или строка состояния не имеет полупрозрачного цвета или белого цвета.
Как правильно настроить DrawerLayout
в соответствии со спецификациями Material Design с помощью компонента архитектуры навигации?
РЕДАКТИРОВАТЬ:
Я реструктурировал приложение в соответствии с предложением Иана, и теперь DrawerLayout
отображается в строке состояния, но нет ни скрима, ни полупрозрачногобар в верхней части DrawerLayout
:
![No scrim DrawerLayout](https://i.stack.imgur.com/RmQdE.png)