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>
emen
sumber
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.

Sohaib
sumber
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>
Zahra. HY
sumber
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.

Muz
sumber
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>
inder_gt
sumber
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

anoopbryan2
sumber
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>
1'hafs
sumber
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>
Abhishek Garg
sumber
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>
Lavanya Velusamy
sumber