Barele de sistem translucide în mod corect – în toate nivelurile API și temele
Pentru a desena marginile cu bare de stare și de navigare translucide pe v21+ cu teme întunecate și luminoase.
Acest articol presupune că ați parcurs deja Gesture Navigation- Going Edge to Edge (I)
Din moment ce dorim ca conținutul să fie desenat în spatele barelor de sistem, înseamnă că
- Avem nevoie de transluciditate
- Avem nevoie fie de scripeți întunecați, fie de scripeți luminoși pentru bara de navigare și statusBar în funcție de tema curentă.
Capacitate
- Color StatusBarColor
Dar suntem limitați să folosim culori mai închise, deoarece pictogramele statusBar rămân de culoare albă. - windowTranslucentStatus true va suprascrie statusBarColor și va aplica un crâmpei întunecat fix care nu poate fi modificat.
- Fully configurable navigationBarColor
Dar suntem limitați să folosim culori mai închise, deoarece butoanele de navigare rămân de culoare albă. - windowTranslucentNavigation true va suprascrie navigationBarColor și va aplica un crâmpei întunecat fix care nu poate fi modificat.
- Icoanele barei de stare & Butoanele barei de navigare rămân întotdeauna deschise.
v23+
- windowLightStatusBar
Activază pictogramele barei de stare să fie închise la culoare
v27+
- windowLightNavigationBar
Activază butoanele barei de navigare să fie închise la culoare.
Soluție
Nota: Vom folosi un statusBarColor transparent. Deoarece vom folosi în schimb AppBar pentru a colora StatusBar. Din moment ce AppBar acoperă zona statusBar-ului, ar trebui să fie suficient să setați fundalul relevant direct pe AppBar.
În implementarea dumneavoastră, aceasta poate fi orice vizualizare care se află în partea de sus. Dacă nu există o vizualizare în partea de sus a ecranului , puteți utiliza în schimb atributul statsuBarColor. Acesta va da aceleași rezultate.
Valori de bază:
AppBarLayout:
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/moviesAppBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/status_bar_scrim"
android:theme="@style/Widget.AppTheme.AppBar"
app:elevation="2dp"
app:layout_constraintTop_toTopOf="parent"> <androidx.appcompat.widget.Toolbar
android:id="@+id/moviesToolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
app:title="Popular Movies" />
</com.google.android.material.appbar.AppBarLayout>
v21 – v22:
- Noi renunțăm la windowTranslucentStatus și windowTranslucentNavigation, deoarece sistemul va aplica un scrim întunecat dacă le folosim.
- Icoanele din bara de stare și din bara de navigare rămân de culoare albă.
- Înseamnă că putem folosi doar fundaluri/scrimă de culoare închisă.
Avem 2 opțiuni aici:
Utilizați fundaluri diferite pentru temele întunecate și luminoase.
În cazul temei întunecate, culoareaSurface va fi închisă/neagră. Putem folosi o culoare similară și pentru systemBars.
În cazul temei light, colorSurface va fi light/white. Nu putem folosi o culoare similară pentru systembars, deoarece pictogramele sunt albe.
În principiu, nu ne putem descurca foarte bine cu systembars cu tematică deschisă în v21-22. Așa că ne rămâne să folosim doar fundaluri întunecate.
Utilizați același fundal pentru teme întunecate și luminoase.
Ne putem descurca folosind fundaluri întunecate pentru teme întunecate și luminoase.
Ca rezultat, tema întunecată va străluci.
În cazul temei luminoase:
Din moment ce această perdea întunecată va fi aplicată și la AppBar (dacă desenăm în spatele ei, ceea ce este cazul!), va trebui să folosim un ThemeOverlay.Dark pentru AppBar. Altfel vom avea text întunecat pe un fundal întunecat.