Панель інструментів, що перекривається під рядком стану


168

Я хочу мати у своїй діяльності панель інструментів 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". Це працювало для мене ... як це запропонував один із користувачів SO нижче.
Muahmmad Tayyib

Відповіді:


273

Використовуйте android:fitsSystemWindows="true"у кореневій формі вашого макета (LinearLayout у вашому випадку). І android:fitsSystemWindowsє

внутрішній атрибут для налаштування макета перегляду на основі системних вікон, таких як рядок стану. Якщо це правда, коригує прокладку цього виду, щоб залишати місце для вікон системи. Набирає чинності лише в тому випадку, якщо ця думка не є вбудованою діяльністю.

Повинно бути булевим значенням, або "істинним", або "хибним".

Це також може бути посилання на ресурс (у формі "@ [пакет:] тип: ім'я") або атрибут теми (у формі "? [Пакет:] [тип:] ім'я"), що містить значення цього типу .

Це відповідає глобальному символу ресурсу атрибута, який відповідаєSystemWindows.


22
@AimanB Ви можете встановити його в усьому світі, встановивши в темі як <item name="android:fitsSystemWindows">true</item>
Самір

13
@Samir це має побічний ефект, як повідомляється в цьому коментарі
Sufian

9
Ця проблема з'явиться навіть після того, як ми додамо Android: fitsSystemWindows = "true" до кореневого макета, якщо ваш стиль містить <item name = "android: statusBarColor"> @ android: color / transparent </item> це. Щойно згаданий для тих, хто читає це питання.
Саккер Хуссейн

3
У мене така ж проблема і на android: fitsSystemWindows = "true" не працює для мене. Будь-хто має рішення, будь ласка, опублікуйте.
Джатін

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>

Переконайтеся, що у вас немає наступного рядка, оскільки AS ставить його за замовчуванням:

<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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.