Estou testando o AppCompat no Marshmallow. E eu quero ter uma barra de status transparente, porém ela fica branca. Tentei algumas soluções, mas não funcionaram para mim ( barra de status transparente não funciona com windowTranslucentNavigation = "false" , Lollipop: desenhe atrás de statusBar com sua cor definida como transparente ). Aqui está o código relacionado.
Meus estilos.xml
<style name="Bacon" parent="Theme.Bacon"/>
<style name="Theme.Bacon" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/theme_primary</item>
<item name="colorPrimaryDark">@color/theme_primary_dark</item>
<item name="colorAccent">@color/theme_accent</item>
<item name="windowActionBar">false</item>
<item name="windowActionBarOverlay">true</item>
<item name="windowNoTitle">true</item>
<item name="android:windowBackground">@color/background_material_light</item>
</style>
<style name="Theme.Bacon.Detail" parent="Bacon"/>
v21
<style name="Bacon" parent="Theme.Bacon">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
<style name="Theme.Bacon.Detail" parent="Bacon">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
Atividade
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" />
</FrameLayout>
Fragmento
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="192dp"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:statusBarScrim="@color/black_trans80">
<ImageView
android:id="@+id/photo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/photo"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/anim_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
android
android-support-library
android-appcompat
androiddesignsupport
android-6.0-marshmallow
pt2121
fonte
fonte
Respostas:
Encontrei a resposta neste link: A cor da barra de status não muda com o layout relativo como elemento raiz
Então, precisamos remover o
em styles.xml (v21). E funciona muito bem para mim.
fonte
(Um pouco tarde para a festa, mas pode ajudar alguém)
Eu tive o mesmo problema. De alguma forma, algumas atividades estavam normais, enquanto as novas que criei exibiam uma barra de status branca em vez de um
colorPrimaryDark
valor.Depois de tentar várias dicas, percebi que as atividades normais de trabalho eram todas usando
CoordinatorLayout
como raiz do layout, enquanto para as outras eu tinha trocado por layouts regulares porque não precisava dos recursos (animação, etc) fornecidos peloCoordinatorLayout
.Portanto, a solução é fazer
CoordinatorLayout
o layout raiz e, dentro dele, adicionar a raiz do layout anterior. Aqui está um exemplo:POR FAVOR, NOTE que sem
android:fitsSystemWindows="true"
essa solução não funciona para mim.Testado em Lollipop e Marshmallow
fonte
android:fitsSystemWindows="true"
aoCoordinatorLayout
no Android 8.CoordinatorLayout
quando tive o mesmo problema e a propriedade específica que corrigiu isso para mim foiandroid:fitsSystemWindows="true"
android:fitsSystemWindows="true"
não funcionou para mim. O que resolveu meu problema é usar um tema que não estáAppTheme.NoActionBar
na atividade com aCoordinatorLayout
. Não sei por que isso consertou.CoordinatorLayout
ouandroid:fitsSystemWindows="true"
nenhum está funcionando para mim.fonte
Você tem que adicionar esta propriedade ao seu estilo para ver o conteúdo
fonte
Adicione isso em seu style.xml
e isso em seu onCreate ();
fonte
Depois de tentar sem sucesso todas as opções acima, descobri que definir explicitamente o tema corrigiu o problema.
Isso deve vir antes do super.OnCreate () em sua atividade.
fonte
Basta colocar este item em seu v21 \ styles.xml:
verdade
Deve ser assim:
fonte
false
valores nos últimos 2 itens. Estranho, mas obrigado.Eu enfrentei o mesmo problema. O que fiz foi, no arquivo "v21 / styles.xml", alterar o valor true:
para:
fonte
Você verá essa linha de código em values / styles / styles.xml (v21). Remova-o e isso resolverá o problema
Link para esta resposta
fonte
Corrigi meu problema alterando o layout de minha atividade de FrameLayout para RelativeLayout. Obrigado a todos que tentaram ajudar!
Experimente o visualizador de hierarquia ou ViewInspector . Essas ferramentas podem ajudá-lo.
fonte
Basta remover a seguinte tag do estilo v21 @android: color / transparent
Isso funciona para mim.
fonte
Melhor abordagem
Verifique o arquivo style.xml onde está o tema NoActionBar. Certifique-se de que seu pai seja Theme.AppCompat.NoActionBar e também personalize-o adicionando seu esquema de cores. Por fim, defina seus temas no manifesto, conforme necessário.
Abaixo está uma amostra do meu arquivo styles.xml (ActionBar + NoActionBar).
fonte
Para mim, funcionou da seguinte maneira:
.NoActionBar
android.support.design.widget.AppBarLayout
android.support.design.widget.CoordinatorLayout
como o layout pai.Essencialmente, é a terceira etapa que desenha a barra de status,
colorPrimaryDark
caso contrário ela não será desenhada se você usar oNoActionBar
tema. A segunda etapa dará à barra de ferramentas essa sobreposição .fonte
Para estilos v23
Para estilos v21
fonte
[
Expanda res -> valores -> diretório de estilos do painel do projeto.
Abra styles.xml (v21)
USE QUALQUER UM DOS MENOS ABAIXO
android:windowDrawsSystemBarBackgrounds
propriedade.android:statusBarColor
propriedade.android:statusBarColor
linha própria.fonte
Se o seu v21 / styles.xml contém
Em seguida, remova ou comente abaixo da linha ou mude a cor da barra de status,
Está funcionando bem. Espero que isso seja útil. Obrigado.
fonte
Eu encontrei uma solução para isso -
adicione isso ao seu estilo e funcionará para API 21 ou superior.
fonte
Não tenho certeza se é tarde, mas espero que ajude alguém. * Faça uma visão falsa com fundo transparente que se encaixa no layout e faça um layout de coordenador como seu elemento raiz do layout.
fonte
Isso tem trabalho para mim
fonte
Meu palpite é que isso é causado pelo seu
android:windowBackground
. É@color/background_material_light
uma referência ao branco?fonte
<item name="android:statusBarColor">@android:color/transparent</item>
por<item name="android:statusBarColor">@null</item>
.Verifique se esta barra de ferramentas fica branca - a AppBar não é desenhada depois de rolar para fora da tela
https://code.google.com/p/android/issues/detail?id=178037#c19
Estou usando bibliotecas 23.0.0. e o bug ainda ocorre.
A solução alternativa para isso é adicionar uma Visualização que quase não ocupa espaço e pode ser invisível. Veja a estrutura abaixo.
Estas perguntas no Stackoverflow.com também se referem a este bug: CoordinatorLayout Toolbar invisível ao entrar até a altura total AppBarLayout - Layout às vezes invisível depois de entrar na visualização (mesmo se não for inserido)
fonte
Se você estiver usando RelativeLayout / CoordinatorLayout, esta é a solução que funcionou para mim:
Você tem que usar
Lembre-se de usar CoordinatorLayout em vez de RelativeLayout (o desempenho é melhor e funciona perfeitamente com AppBarLayout)
É assim que o seu fragmento deve começar
Boa codificação!
fonte
adicione o item 'windowTranslucentStatus' em estilos
fonte
Adicione isso em seu style.xml
Nota: a coloração da barra de status não é compatível abaixo do nível 21 da API.
fonte
Adicione essas 2 linhas no arquivo java abaixo
fonte