#android #material-components-android
Вопрос:
Я был на старой версии material components, 1.0.0. Я обновляюсь до версии 1.4.0, и я думаю, что в версии 1.1.0 есть большинство больших изменений стиля/темы.
Я бы хотел, чтобы панель навигации скользила по строке состояния. У меня это работает с 1.0.0:
<style name="AppTheme.Toolbar" parent="AppTheme">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:actionOverflowButtonStyle">@style/AppTheme.Toolbar.Overflow</item>
</style>
Однако теперь с материалом 1.4.0 вы должны установить android:statusBarColor в цвет. Так что, если я установлю:
<item name="android:statusBarColor">@color/md_red_800</item>
Таким образом, чтобы мой цвет строки состояния был красным, а не фиолетовым по умолчанию, ящик больше не будет перекрывать строку состояния при расширении.
Как я могу установить цвет строки состояния и при этом развернуть ящик над строкой состояния?
Ответ №1:
На самом деле Ящик скользит не по строке состояния, а под ней.
Вы можете установить windowTranslucentStatus
атрибут true
в themes.xml
состояние наложения.
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_200</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="android:windowTranslucentStatus">true</item>
</style>
</resources>
Однако , как только вы его установите true
, statusBarColor
он теряет свой эффект. Если вы все еще хотите иметь цвет фона панели состояния, вам необходимо установить любой цвет для ее базового фона (например, для отображения основной активности), кроме установки цвета самой панели состояния. И вам также может потребоваться настроить fitsSystemWindow
true
макет содержимого. Ниже приведен пример макета:
<androidx.drawerlayout.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/drawerLayout"
android:background="?attr/colorPrimaryVariant"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- contents here -->
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:id="@ id/navigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/navigation_header"
app:menu="@menu/navigation_view" />
</androidx.drawerlayout.widget.DrawerLayout>
Комментарии:
1. Кажется, что цвета отключены, т. Е. материал blue 600 намного темнее. Похоже, строка состояния не на 100% прозрачна.