Bilah alat tumpang tindih di bawah bilah status


168

Saya ingin memiliki toolbar appcompat v21 dalam aktivitas saya. Tetapi bilah alat yang saya laksanakan tumpang tindih di bawah bilah status. Bagaimana saya bisa memperbaikinya?

toolbar yang tumpang tindih

Berikut ini tata letak aktivitas xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <include
        android:id="@+id/toolbar"
        layout="@layout/toolbar" />

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>

Tampilan bilah alat:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary" />

Gaya tema:

<style name="AppTheme" parent="MaterialNavigationDrawerTheme.Light.DarkActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
</style>

Bagaimana Anda menyesuaikan Themeaplikasi Anda? mempostingnya.
SilentKnight

di CoordinatorLayoutAnda dapat mencoba ini: stackoverflow.com/a/47906087/2201814
MHSFisher

bagi mereka yang menghadapi masalah dengan androidx.coordinatorlayout.widget.CoordinatorLayout sebagai tampilan root harus mengatur android: fitsSystemWindows = "false" .Ini bekerja untuk saya ... seperti yang disarankan oleh salah satu pengguna SO di bawah ..
Muahmmad Tayyib

Jawaban:


273

Gunakan android:fitsSystemWindows="true"dalam tampilan root tata letak Anda (LinearLayout dalam kasus Anda). Dan android:fitsSystemWindowsmerupakan

atribut internal untuk menyesuaikan tata letak tampilan berdasarkan sistem windows seperti bilah status. Jika benar, sesuaikan bantalan tampilan ini untuk memberikan ruang bagi sistem windows. Hanya akan berlaku jika tampilan ini dalam aktivitas yang tidak tertanam.

Harus berupa nilai boolean, baik "benar" atau "salah".

Ini juga bisa menjadi referensi ke sumber daya (dalam bentuk "@ [paket:] ketik: nama") atau atribut tema (dalam bentuk "? [Paket:] [jenis:] nama") yang berisi nilai dari jenis ini .

Ini sesuai dengan simbol sumber daya atribut global yang cocok dengan SystemWindows.


22
@ AimanB Anda dapat mengaturnya secara global dengan menetapkan tema sebagai <item name="android:fitsSystemWindows">true</item>
Samir

13
@Samir ini memiliki efek samping seperti yang dilaporkan dalam komentar ini
Sufian

9
Masalah ini akan muncul bahkan setelah kami menambahkan android: fitsSystemWindows = "true" ke tata letak root, Jika gaya Anda berisi <item name = "android: statusBarColor"> @ android: color / transparan </item> ini. Hanya disebutkan untuk mereka yang membaca pertanyaan ini.
Sakkeer Hussain

3
Saya mengalami masalah yang sama dan android: fitsSystemWindows = "true" tidak berfungsi untuk saya. Ada yang punya solusi silakan posting ini.
Jatin

1
Jawaban ini memperbaiki masalah saya. Tapi sekarang saya menemukan semua toasts android dengan 0 padding!
kds23

18

Cukup atur ini ke file v21 / styles.xml

 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
 <item name="android:statusBarColor">@color/colorPrimaryDark</item>

dan pastikan

 <item name="android:windowTranslucentStatus">false</item>

1
jika Anda memiliki sesuatu seperti aplikasi: layout_behavior = "@ string / appbar_scrolling_view_behavior", hapus! @TheHunter
Zahra.HY

set <item name = "android: windowTranslucentStatus"> false </item>
Zahra.HY

10

Bagi saya, masalahnya adalah saya menyalin sesuatu dari contoh dan menggunakannya

<item name="android:windowTranslucentStatus">true</item>

hanya menghapus ini memperbaiki masalah saya.


10

Tidak ada jawaban yang bekerja untuk saya, tetapi inilah yang akhirnya berhasil setelah saya mengatur android:fitSystemWindowstampilan root (saya mengatur ini dalam gaya v21):

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">false</item>

Pastikan Anda tidak memiliki baris berikut karena AS meletakkannya secara default:

<item name="android:statusBarColor">@android:color/transparent</item>

6

Tidak ada jawaban yang bekerja untuk saya, tetapi inilah yang akhirnya berhasil setelah saya menetapkan:

android:fitsSystemWindows="false"

Dalam file tata letak aktivitas induk, ini tidak disarankan di banyak tempat tapi ini berfungsi untuk saya dan menghemat hari saya


Ini bekerja untuk saya juga ketika tampilan root saya di tata letak adalah androidx.coordinatorlayout.widget.CoordinatorLayouttipe.
Faheem Ezani

5

Saya menghapus semua baris yang disebutkan di bawah ini dari /res/values-v21/styles.xml dan sekarang berfungsi dengan baik.

 <item name="android:windowDrawsSystemBarBackgrounds">true</item>
 <item name="android:statusBarColor">@android:color/transparent</item>


 <item name="windowActionBar">false</item>
 <item name="android:windowDisablePreview">true</item>

 <item name="windowNoTitle">true</item>

 <item name="android:fitsSystemWindows">true</item>

0

Menurut google docs, kita tidak boleh menggunakan atribut fitsSystemWindows dalam tema aplikasi, ini dimaksudkan untuk digunakan dalam file tata letak. Penggunaan dalam tema dapat menyebabkan masalah dalam pesan bersulang.

Lihat Masalah di sini & contoh masalah yang disebabkan di sini

<item name="android:fitsSystemWindows">true</item>

Contoh menggunakan cara yang benar dan yang berfungsi dengan baik dengan windowTranslucentStatus juga.

<?xml version="1.0" encoding="utf-8"?>
<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/drawer_layout"

android:fitsSystemWindows="true"

android:layout_width="match_parent"
android:layout_height="match_parent"
> 


<include layout="@layout/toolbar"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">
</include>

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    android:background="@color/white"
    android:animateLayoutChanges="true"
    app:headerLayout="@layout/navigation_drawer_header"
    app:menu="@menu/navigation_drawer_menu" />

</android.support.v4.widget.DrawerLayout>

0

Hapus garis di bawah ini dari gaya atau gaya (21)

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.