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

Я хочу, чтобы в моей деятельности была панель инструментов 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>

person emen    schedule 20.04.2015    source источник
comment
Как вы настраивали Theme своего приложения? разместите их.   -  person SilentKnight    schedule 20.04.2015
comment
в CoordinatorLayout вы можете попробовать это: stackoverflow.com/a/47906087/2201814   -  person MHSFisher    schedule 23.12.2017
comment
для тех, кто сталкивается с проблемой с androidx.coordinatorlayout.widget.CoordinatorLayout в качестве корневого представления, следует установить android: fitsSystemWindows = false. это сработало для меня ... как было предложено одним из пользователей SO ниже ..   -  person Muahmmad Tayyib    schedule 15.05.2020


Ответы (8)


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

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

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

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

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

person Sohaib    schedule 20.04.2015
comment
Спасибо. Это работает. Но мне было интересно, есть ли способ сделать это глобально? - person emen; 20.04.2015
comment
@AimanB вы можете установить его глобально, установив в теме как <item name="android:fitsSystemWindows">true</item> - person Samir; 17.06.2015
comment
@Samir, у этого есть побочный эффект, как указано в этот комментарий - person Sufian; 02.09.2015
comment
По умолчанию ваше приложение должно уважать системные окна. Возможно, вы могли бы открыть свою деятельность с некоторыми флагами? - person stdout; 14.04.2016
comment
Эта проблема возникнет даже после того, как мы добавим android: fitsSystemWindows = true в корневой макет, если ваш стиль содержит ‹item name = android: statusBarColor› @android: color / transparent ‹/item› this. Только что упомянуто для тех, кто читает этот вопрос. - person Sakkeer Hussain; 27.05.2016
comment
У меня такая же проблема, и android: fitsSystemWindows = true у меня не работал. У любого есть решения, пожалуйста, опубликуйте. - person Jatin; 08.06.2016
comment
@Jatin с использованием android: fitsSystemWindows = true в тех макетах, где вы столкнулись с этой проблемой, должно решить ее, просто решите мою. - person mfaisalhyder; 10.06.2016
comment
@MFaisalHyder У меня есть панель навигации, которую я добавил туда, а также в макет заголовка ... проблема все еще не решена. - person Jatin; 10.06.2016
comment
@Jatin добавьте это свойство только в тот макет, в котором панель инструментов перекрывает строку состояния и конкретную папку values-v1X, например, если вы тестируете 5.0, затем добавьте это в стили values-v1X соответственно ‹item name = android: statusBarColor› @color / ColorPrimaryToolBar ‹/item› ‹имя элемента = android: windowTranslucentStatus› true ‹/item› - person mfaisalhyder; 10.06.2016
comment
Этот ответ устранил мою проблему. Но теперь я нахожу все тосты для Android с нулевым отступом! - person kds23; 24.10.2016
comment
Я могу подтвердить, что в activity_main.xml внутри android.support.v4.widget.DrawerLayout вы должны написать android:fitsSystemWindows="true". - person CoolMind; 30.11.2016
comment
Не работает в корневом макете, но работает в стиле приложения. android: fitsSystemWindows = true - person Lalit Sharma; 25.07.2017
comment
Совсем не работает. Это худший кошмар на свете. Cmon Android, есть только два свойства для обработки: цвет фона и высота строки состояния и панели навигации. Это действительно так сложно? - person ozapa; 09.08.2017
comment
Это сработало как шарм, но мне пришлось удалить android:fitsSystemWindows на самой панели инструментов. - person Pei; 17.04.2018
comment
android: fitsSystemWindows = true игнорирует отступы в корневом макете, поэтому представления внутри него касаются краев экрана. Поля в корне сохраняются, но появляются серые границы. Это material_grey_850, который, как мне кажется, появляется из-за использования Theme.AppCompat. Раздражающие вещи также происходят в одном приложении с обычно скрытой панелью навигации. В эмуляторе, когда всплывает панель навигации, он сжимает единственный вид, который у меня есть, с весом макета, в то время как в одной аппаратной нижней части корневого макета остается там, где появится панель навигации, независимо от того, скрыта ли панель навигации. Просто тестирую в старом приложении, но интересно увидеть, как возникают проблемы, которые нужно исправить. - person Smartybartfast; 29.06.2018

Просто установите это в файл v21 / styles.xml

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

и будь уверен

 <item name="android:windowTranslucentStatus">false</item>
person Zahra.HY    schedule 28.06.2016
comment
если у вас есть что-то вроде app: layout_behavior = @ string / appbar_scrolling_view_behavior, удалите это! @Охотник - person Zahra.HY; 29.06.2016
comment
установить ‹item name = android: windowTranslucentStatus› false ‹/item› - person Zahra.HY; 29.06.2016

Для меня проблема заключалась в том, что я скопировал что-то из примера и использовал

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

просто удалив это, я решил мою проблему.

person Muz    schedule 13.06.2016

Ни один из ответов не сработал для меня, но это то, что наконец сработало после того, как я установил android:fitSystemWindows в корневом представлении (я установил их в стилях v21):

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

Убедитесь, что у вас нет следующей строки, как это указано в AS по умолчанию:

<item name="android:statusBarColor">@android:color/transparent</item>
person inder_gt    schedule 04.09.2016

Ни один из ответов не помог мне, но вот что, наконец, сработало после того, как я установил:

android:fitsSystemWindows="false"

В файле макета родительской активности это не предлагается во многих местах, но это работает для меня и спасает мне день

person anoopbryan2    schedule 17.02.2018
comment
Это сработало для меня также, когда мое корневое представление в макете было типа androidx.coordinatorlayout.widget.CoordinatorLayout. - person Muhammad Faheem Mohd Ezani; 04.01.2020

Я удалил все упомянутые ниже строки из /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>
person 1'hafs    schedule 20.07.2016

Согласно документации 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>
person Abhishek Garg    schedule 17.04.2018

Удалите строки ниже из стиля или стиля (21)

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
<item name="android:windowTranslucentStatus">false</item>
person Lavanya Velusamy    schedule 15.09.2018