Панель инструментов перекрывается под строкой состояния


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 ниже ...
Муахмад Тайиб

Ответы:


273

Используйте android:fitsSystemWindows="true"в корневом представлении вашего макета (LinearLayout в вашем случае). И android:fitsSystemWindowsявляется

внутренний атрибут для настройки макета вида на основе системных окон, таких как строка состояния. Если true, корректирует отступ этого вида, чтобы оставить место для системных окон. Действует только в том случае, если это представление не включено.

Должно быть логическим значением: «истина» или «ложь».

Это также может быть ссылка на ресурс (в форме "@ [package:] type: name") или атрибут темы (в форме "? [Package:] [type:] name"), содержащий значение этого типа ,

Это соответствует глобальному атрибуту ресурса символа fitsSystemWindows.


22
@AimanB вы можете установить его глобально, установив в теме как <item name="android:fitsSystemWindows">true</item>
Самир

13
@Samir у этого есть побочный эффект, как сообщается в этом комментарии
Sufian

9
Эта проблема возникнет даже после того, как мы добавим android: fitsSystemWindows = "true" в корневой макет, если ваш стиль содержит <item name = "android: statusBarColor"> @ android: color / transparent </ item> this. Просто упомянуто для тех, кто читает этот вопрос.
Саккир Хуссейн

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
если у вас есть что-то вроде app: layout_behavior = "@ string / appbar_scrolling_view_behavior", удалите его! @TheHunter
Zahra.HY

set <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типом.
Фахим Эзани

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 Docs, мы не должны использовать атрибут 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.