แถบเครื่องมือซ้อนทับด้านล่างแถบสถานะ


169

ฉันต้องการให้แถบเครื่องมือ appcompat v21 ในกิจกรรมของฉัน แต่แถบเครื่องมือที่ฉันใช้อยู่นั้นวางซ้อนกันด้านล่างแถบสถานะ ฉันจะแก้ไขได้อย่างไร

แถบเครื่องมือที่ทับซ้อนกัน

นี่คือโครงร่างกิจกรรม 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>

มุมมองแถบเครื่องมือ:

<?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" />

สไตล์ของธีม:

<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>

คุณปรับแต่งใบสมัครThemeของคุณอย่างไร โพสต์พวกเขา
SilentKnight

ในCoordinatorLayoutคุณสามารถลองนี้: stackoverflow.com/a/47906087/2201814
MHSFisher

สำหรับผู้ที่กำลังประสบปัญหากับ androidx.coordinatorlayout.widget.CoordinatorLayout ตามที่รูทวิวควรตั้งค่า android: fitsSystemWindows = "false" มันใช้ได้กับฉัน ... ตามที่แนะนำโดยผู้ใช้หนึ่งคนด้านล่าง ..
Muahmmad Tayyib

คำตอบ:


273

ใช้android:fitsSystemWindows="true"ในมุมมองรูทของเลย์เอาต์ของคุณ (LinearLayout ในกรณีของคุณ) และandroid:fitsSystemWindowsเป็น

แอ็ตทริบิวต์ภายในเพื่อปรับเลย์เอาต์มุมมองตามหน้าต่างระบบเช่นแถบสถานะ หากเป็นจริงให้ปรับการขยายของมุมมองนี้เพื่อให้มีพื้นที่ว่างสำหรับหน้าต่างระบบ จะมีผลเมื่อมุมมองนี้อยู่ในกิจกรรมที่ไม่ได้ฝัง

ต้องเป็นค่าบูลีนไม่ว่าจะเป็น "true" หรือ "false"

นี่อาจเป็นการอ้างอิงถึงทรัพยากร (ในรูปแบบ "@ [แพ็คเกจ:] ประเภท: ชื่อ") หรือแอตทริบิวต์ของชุดรูปแบบ (ในรูปแบบ "? [แพ็คเกจ:] [ประเภท:] ชื่อ") ที่มีค่าประเภทนี้ .

สิ่งนี้สอดคล้องกับสัญลักษณ์ทรัพยากรแอตทริบิวต์สากลเหมาะกับ SystemSystemWindows


22
@AimanB คุณสามารถตั้งค่าได้ทั่วโลกโดยการตั้งค่าในรูปแบบ <item name="android:fitsSystemWindows">true</item>
Samir

13
@Samir สิ่งนี้มีผลข้างเคียงตามที่รายงานในความคิดเห็นนี้
Sufian

9
ปัญหานี้จะเกิดขึ้นหลังจากที่เราเพิ่ม android: fitsSystemWindows = "true" ในการรูทเค้าโครงหากสไตล์ของคุณมี <item name = "android: statusBarColor"> @ android: color / transparent </item> นี่ พูดถึงเพียงสำหรับผู้ที่กำลังอ่านคำถามนี้
Sakkeer Hussain

3
ฉันมีปัญหาเดียวกันและ android: fitsSystemWindows = "true" ไม่ทำงานสำหรับฉัน บุคคลใดมีทางออกนี้โปรดโพสต์
Jatin

1
คำตอบนี้แก้ไขปัญหาของฉัน แต่ตอนนี้ฉันพบขนมปังปิ้ง Android ทั้งหมดด้วยการเติมเต็ม 0!
kds23

18

เพียงตั้งค่านี้เป็นไฟล์ v21 / styles.xml

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

และแน่นอน

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

1
หากคุณมีแอพเช่น layout_behavior = "@ string / appbar_scrolling_view_behavior" ให้ลบออก! @TheHunter
Zahra.HY

ตั้ง <item name = "android: windowTranslucentStatus"> false </item>
Zahra.HY

10

สำหรับฉันปัญหาคือว่าฉันคัดลอกบางอย่างจากตัวอย่างและใช้

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

เพียงแค่ลบสิ่งนี้แก้ไขปัญหาของฉันได้


10

ไม่มีคำตอบที่เหมาะกับฉัน แต่นี่คือสิ่งที่ได้ผลในที่สุดหลังจากฉันตั้งค่าandroid:fitSystemWindowsในมุมมองรูต (ฉันตั้งค่าเหล่านี้ในสไตล์ v21):

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

ตรวจสอบให้แน่ใจว่าคุณไม่มีบรรทัดต่อไปนี้ตามที่วางไว้โดยค่าเริ่มต้น:

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

6

ไม่มีคำตอบใดที่เหมาะกับฉัน แต่นี่คือสิ่งที่ได้ผลในที่สุดหลังจากฉันตั้งค่า:

android:fitsSystemWindows="false"

ในไฟล์เค้าโครงกิจกรรมหลักไม่แนะนำในหลาย ๆ ที่ แต่ใช้งานได้สำหรับฉันและช่วยประหยัดวันของฉัน


สิ่งนี้ใช้ได้กับฉันเมื่อมุมมองรูทของฉันในเค้าโครงเป็นandroidx.coordinatorlayout.widget.CoordinatorLayoutประเภท
Faheem Ezani

5

ฉันลบทุกบรรทัดที่กล่าวถึงด้านล่างจาก/res/values-v21/styles.xmlและตอนนี้มันทำงานได้ดี

 <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

ตามเอกสารของ Google เราไม่ควรใช้แอตทริบิวต์ FitsSystemWindows ในชุดรูปแบบของแอปมีวัตถุประสงค์เพื่อใช้ในไฟล์เลย์เอาต์ การใช้ในชุดรูปแบบอาจทำให้เกิดปัญหาในข้อความขนมปังปิ้ง

ตรวจสอบปัญหาที่นี่ และตัวอย่างของปัญหาที่เกิดขึ้นที่นี่

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

ตัวอย่างการใช้วิธีที่ถูกต้องและทำงานได้ดีกับwindowTranslucentStatusเช่นกัน

<?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

ลบบรรทัดด้านล่างออกจากสไตล์หรือสไตล์ (21)

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.