Barra de ferramentas sobreposta abaixo da barra de status

168

Quero ter a barra de ferramentas appcompat v21 em minha atividade. Mas a barra de ferramentas que estou implementando está sobreposta abaixo da barra de status. Como posso corrigir isso?

barra de ferramentas sobreposta

Aqui está o xml do layout da atividade:

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

Visualização da barra de ferramentas:

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

Estilo do tema:

<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>
emen
fonte
Como você personalizou o Themeseu aplicativo? publicá-los.
SilentKnight:
em que CoordinatorLayoutvocê pode tentar o seguinte: stackoverflow.com/a/47906087/2201814
MHSFisher
para aqueles que estão enfrentando o problema com androidx.coordinatorlayout.widget.CoordinatorLayout como a visualização raiz deve definir o android: fitsSystemWindows = "false". isso funcionou para mim ... como sugerido por um dos usuários SO abaixo ..
Muahmmad Tayyib

Respostas:

273

Use android:fitsSystemWindows="true"na visualização raiz do seu layout (LinearLayout no seu caso). E android:fitsSystemWindowsé um

atributo interno para ajustar o layout da vista com base nas janelas do sistema, como a barra de status. Se verdadeiro, ajusta o preenchimento dessa visualização para deixar espaço para as janelas do sistema. Só entrará em vigor se essa exibição estiver em uma atividade não incorporada.

Deve ser um valor booleano, "true" ou "false".

Isso também pode ser uma referência a um recurso (no formato "@ [package:] type: name") ou atributo de tema (no formato "? [Package:] [type:] name") contendo um valor desse tipo .

Isso corresponde ao símbolo de recurso de atributo global fitsSystemWindows.

Sohaib
fonte
22
@AimanB, você pode configurá-lo globalmente, definindo o tema como: <item name="android:fitsSystemWindows">true</item>
Samir
13
@Samir este tem um efeito colateral como relatado em este comentário
Sufian
9
Esse problema ocorrerá mesmo após adicionarmos android: fitsSystemWindows = "true" ao layout raiz, se o seu estilo contiver <item name = "android: statusBarColor"> @ android: color / transparent </item> this. Apenas mencionado para quem está lendo esta pergunta.
Sakkeer Hussain
3
Estou tendo o mesmo problema e o android: fitsSystemWindows = "true" não funcionou para mim. Qualquer um que tenha soluções, por favor poste.
Jatin
1
Esta resposta resolveu meu problema. Mas agora encontro todas as torradas do Android com 0 preenchimento!
kds23
18

Basta definir isso para o arquivo v21 / styles.xml

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

e tenha certeza

 <item name="android:windowTranslucentStatus">false</item>
Zahra.HY
fonte
1
se você tiver algo como app: layout_behavior = "@ string / appbar_scrolling_view_behavior", remova-o! @TheHunter
Zahra.HY
set <item name = "android: windowTranslucentStatus"> false </item>
Zahra.HY
10

Para mim, o problema era que copiei algo de um exemplo e usei

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

apenas remover isso corrigiu o meu problema.

Muz
fonte
10

Nenhuma das respostas funcionou para mim, mas foi o que finalmente funcionou depois de definir android:fitSystemWindowsa visualização raiz (eu as defino nos estilos v21):

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

Verifique se você não possui a seguinte linha, como a AS coloca por padrão:

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

Nenhuma das respostas funcionou para mim, mas foi o que finalmente funcionou depois de definir:

android:fitsSystemWindows="false"

No arquivo de layout da atividade dos pais, não é sugerido em muitos lugares, mas é um trabalho para mim e salva meu dia

anoopbryan2
fonte
Isso funcionou para mim também quando minha visualização raiz no layout era um androidx.coordinatorlayout.widget.CoordinatorLayouttipo.
Faheem Ezani
5

Eu removi todas as linhas mencionadas abaixo de /res/values-v21/styles.xml e agora está funcionando bem.

 <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>
1'hafs
fonte
0

De acordo com o Google Docs, não devemos usar o atributo fitsSystemWindows no tema do aplicativo, ele deve ser usado em arquivos de layout. O uso de temas pode causar problemas nas mensagens do sistema.

Marque Problema aqui e exemplo de problema causado aqui

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

Exemplo de uso da maneira correta e que funciona bem com windowTranslucentStatus também.

<?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>
Abhishek Garg
fonte
0

Remova as linhas abaixo do estilo ou estilo (21)

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