Thanh công cụ chồng chéo bên dưới thanh trạng thái


168

Tôi muốn có thanh công cụ appcompat v21 trong hoạt động của mình. Nhưng thanh công cụ tôi đang thực hiện đang chồng chéo bên dưới thanh trạng thái. Làm thế nào tôi có thể sửa chữa nó?

thanh công cụ chồng chéo

Đây là cách bố trí hoạt động 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>

Giao diện thanh công cụ:

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

Phong cách chủ đề:

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

Làm thế nào bạn tùy chỉnh Themeapplicaiton của bạn? Đăng chúng lên.
SilentKnight

trong CoordinatorLayoutbạn có thể thử điều này: stackoverflow.com/a/47906087/2201814
MHSFisher

đối với những người đang phải đối mặt với vấn đề này androidx.coordinatorlayout.widget.CoordinatorLayout như xem gốc nên đặt android: fitsSystemWindows = "false" .Đây làm việc cho tôi ... theo đề nghị của một trong những người sử dụng SO dưới đây ..
Muahmmad Tayyib

Câu trả lời:


273

Sử dụng android:fitsSystemWindows="true"trong chế độ xem gốc của bố cục của bạn (linearLayout trong trường hợp của bạn). Và android:fitsSystemWindowslà một

thuộc tính bên trong để điều chỉnh bố cục khung nhìn dựa trên các cửa sổ hệ thống như thanh trạng thái. Nếu đúng, điều chỉnh phần đệm của chế độ xem này để chừa không gian cho các cửa sổ hệ thống. Sẽ chỉ có hiệu lực nếu chế độ xem này nằm trong một hoạt động không được nhúng.

Phải là giá trị boolean, "true" hoặc "false".

Đây cũng có thể là một tham chiếu đến một tài nguyên (ở dạng "@ [gói:] type: name") hoặc thuộc tính theme (ở dạng "? [Gói:] [type:] name") chứa giá trị của loại này .

Điều này tương ứng với biểu tượng tài nguyên thuộc tính toàn cầu fitSystemWindows.


22
@AimanB bạn có thể đặt nó trên toàn cầu bằng cách đặt trong chủ đề là <item name="android:fitsSystemWindows">true</item>
Samir

13
@Samir điều này có tác dụng phụ như được báo cáo trong bình luận này
Sufian

9
Vấn đề này sẽ đến ngay cả sau khi chúng tôi đã thêm android: fitSystemWindows = "true" vào bố cục gốc, Nếu kiểu của bạn chứa <item name = "android: statusBarColor"> @ android: color / minh bạch </ item> này. Chỉ đề cập cho những người đang đọc câu hỏi này.
Sakkeer Hussain

3
Tôi đang gặp vấn đề tương tự và android: fitSystemWindows = "true" không hoạt động với tôi. Bất kỳ ai có giải pháp này xin vui lòng gửi.
Jatin

1
Câu trả lời này đã khắc phục vấn đề của tôi. Nhưng bây giờ tôi tìm thấy tất cả các bánh mì nướng Android với 0 padding!
kds23

18

Chỉ cần đặt tệp này thành tệp v21 / Styles.xml

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

và chắc chắn

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

1
nếu bạn có một cái gì đó như ứng dụng: layout_behavior = "@ string / appbar_scrolling_view_behavior", hãy xóa nó! @TheHunter
Zahra.HY

đặt <item name = "android: windowTranslucentStatus"> false </ item>
Zahra.HY

10

Đối với tôi, vấn đề là tôi đã sao chép một cái gì đó từ một ví dụ và sử dụng

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

chỉ cần loại bỏ điều này đã khắc phục vấn đề của tôi.


10

Không có câu trả lời nào phù hợp với tôi, nhưng đây là câu trả lời cuối cùng sau khi tôi đặt android:fitSystemWindowsở chế độ xem gốc (tôi đặt những câu này theo kiểu v21):

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

Hãy chắc chắn rằng bạn không có dòng sau vì AS đặt nó theo mặc định:

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

6

Không có câu trả lời nào phù hợp với tôi, nhưng đây là câu trả lời cuối cùng sau khi tôi đặt:

android:fitsSystemWindows="false"

Trong tệp bố trí hoạt động của phụ huynh, nó không được đề xuất ở nhiều nơi nhưng nó hoạt động với tôi và tiết kiệm trong ngày của tôi


Điều này cũng làm việc cho tôi khi chế độ xem gốc của tôi trong bố cục là một androidx.coordinatorlayout.widget.CoordinatorLayoutkiểu.
Faheem Ezani

5

Tôi đã xóa tất cả các dòng được đề cập bên dưới khỏi /res/values-v21/styles.xml và bây giờ nó đang hoạt động tốt.

 <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

Theo tài liệu google, chúng ta không nên sử dụng thuộc tính fitSystemWindows trong chủ đề ứng dụng, nó được dự định sử dụng trong các tệp bố cục. Sử dụng trong các chủ đề có thể gây ra vấn đề trong tin nhắn bánh mì nướng.

Kiểm tra vấn đề ở đây & ví dụ về vấn đề gây ra ở đây

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

Ví dụ về cách sử dụng đúng cách và cũng hoạt động tốt với 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

Xóa các dòng dưới đây từ kiểu hoặc kiểu (21)

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.