Eu configurei minha cor statusBar como transparente para o Lollipop apenas com a seguinte linha no meu tema:
<item name="android:statusBarColor">@android:color/transparent</item>
Agora preciso desenhar atrás dele, mas não consigo ver nenhuma imagem atrás dele. Sei como fazê-lo com a windowTranslucentStatus
propriedade, mas não quero usar essa propriedade, pois ela ignorará a cor do statusBar definido como transparente.
android
android-ui
android-5.0-lollipop
alxscms
fonte
fonte
android:fitsSystemWindows="true"
Respostas:
Método 1:
Para obter uma barra de status completamente transparente, você deve usar o
statusBarColor
que está disponível apenas na API 21 e acima.windowTranslucentStatus
está disponível na API 19 e acima, mas adiciona um fundo colorido à barra de status. No entanto, a configuraçãowindowTranslucentStatus
alcança algo que a alteraçãostatusBarColor
para transparente não: define os sinalizadoresSYSTEM_UI_FLAG_LAYOUT_STABLE
eSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
. A maneira mais fácil de obter o mesmo efeito é definir manualmente esses sinalizadores, o que desativa efetivamente as inserções impostas pelo sistema de layout do Android e deixa você se defender.Você chama esta linha no seu
onCreate
método:Defina também a transparência em /res/values-v21/styles.xml:
Ou defina a transparência programaticamente:
O lado bom dessa abordagem é que os mesmos layouts e designs também podem ser usados na API 19, negociando a barra de status transparente para a barra de status translúcida colorida.
Método 2:
Se você só precisar pintar uma imagem de plano de fundo sob a barra de status, em vez de posicionar uma vista por trás dela, isso pode ser feito simplesmente configurando o plano de fundo do tema da sua atividade para a imagem desejada e definindo a transparência da barra de status, conforme mostrado no método # 1 Este foi o método que eu usei para criar as capturas de tela do artigo Polícia Android de alguns meses atrás.
Método # 3:
Se você precisar ignorar as inserções padrão do sistema para alguns layouts, mantendo-os trabalhando em outros, a única maneira viável de fazer isso é trabalhar com a
ScrimInsetsFrameLayout
classe frequentemente vinculada . Obviamente, algumas das coisas feitas nessa classe não são necessárias para todos os cenários. Por exemplo, se você não planeja usar a sobreposição da barra de status sintético, simplesmente comente tudoinit()
método e não se preocupe em adicionar nada ao arquivo attrs.xml. Eu já vi essa abordagem funcionar, mas acho que você descobrirá que ela traz outras implicações que podem dar muito trabalho para contornar.Também vi que você se opõe a agrupar vários layouts. No caso de agrupar um layout dentro de outro, onde ambos têm
match_parent
altura e largura, as implicações de desempenho são muito triviais para se preocupar. Independentemente disso, você pode evitar completamente essa situação alterando a classe da qual ela se estendeFrameLayout
para qualquer outro tipo de classe de Layout que desejar. Funcionará muito bem.fonte
SYSTEM_UI_FLAG_LAYOUT_STABLE
eSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
foi a solução que eu estava procurando.CollapsingToolbarLayout
eToolbar
: a barra de status não é totalmente translúcida eandroid:statusBarColor
não tem efeito #Isso funcionou para o meu caso
Para obter mais informações sobre como trabalhar com statusBars: youtube.com/watch?v=_mGDMVRO3iE
fonte
Experimente este tema
Certifique-se de que seu layout definido
fonte
android:fitsSystemWindows="false"
está cortando a barra de ferramentas ao meio.Ao invés de
Use o seguinte:
E certifique-se de remover o preenchimento superior (que é adicionado por padrão) no layout 'MainActivity'.
Observe que isso não torna a barra de status totalmente transparente e ainda haverá uma sobreposição "preto desbotado" sobre a barra de status.
fonte
<item name="android:windowTranslucentStatus">true</item>
, ele faz com que o Android coloque um fundo preto desbotado sob a barra de status, que não é o que estou procurando. Existe alguma maneira de não ter esse fundo preto desbotado?A solução de Cody Toombs quase fez o truque para mim. Não tenho certeza se isso está relacionado ao Xamarin ou não, mas agora tenho uma solução aceitável:
Esta é a minha configuração:
Eu tenho um projeto Android em que referenciei os pacotes Android.Support v4 e v7. Eu tenho dois estilos definidos:
values / styles.xml:
values-v21 / styles.xml:
O AndroidManifest tem como alvo "MyStyle":
AndroidManifest.xml:
E, finalmente, o código na atividade principal:
Observe que eu defino o sinalizador DrawsSystemBarBackgrounds, isso faz toda a diferença
Passei muito tempo acertando, na verdade, muito tempo. Espero que esta resposta ajude qualquer um que tente alcançar a mesma coisa.
fonte
android:windowTranslucentStatus
requer o nível 19 ou superior da API, como é possível usá-la em seus values / styles.xml enquanto possui um valorandroid:minSdkVersion
de 10?A resposta de @Cody Toombs leva a um problema que coloca o layout atrás da barra de navegação. Então, o que eu achei foi usar esta solução dada por @Kriti
Aqui está o trecho de código Kotlin para o mesmo:
Você também precisa adicionar
visualização raiz do seu layout.
fonte
Eu tive o mesmo problema, então eu crio o ImageView que se destaca por trás da barra de status API 19+
Definir imagem personalizada atrás da barra de status gist.github.com
fonte
Você pode usar ScrimInsetFrameLayout
https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java
android: fitsSystemWindows = "true" deve ser definido no layout scrim!
fonte
RelativeLayout
vez de umFrameLayout
?Semelhante a algumas das soluções postadas, mas no meu caso, fiz a barra de status transparente e corrigi a posição da barra de ação com uma margem negativa
E eu usei na barra de ferramentas e na visualização raiz
fonte
Existe uma boa biblioteca StatusBarUtil da @laobie que ajuda a desenhar facilmente a imagem na StatusBar.
Basta adicionar o seu
build.gradle
:Em seguida, no conjunto de atividades
No layout
Para mais informações, baixe a demonstração ou clone na página do github e brinque com todos os recursos.
Nota: Suporte KitKat e acima.
Espero que ajude outra pessoa!
fonte
Com o Android Studio 1.4, o projeto de modelo com código da placa da caldeira define o
Overlay
tema no AppbarLayout e / ou na Barra de Ferramentas. Eles também são configurados para serem renderizados atrás da barra de status porfitSystemWindow
attribute = true. Isso fará com que apenas a barra de ferramentas seja renderizada diretamente abaixo da barra de status e tudo o resto será renderizado abaixo da barra de ferramentas. Portanto, as soluções fornecidas acima não funcionarão sozinhas. Você precisará fazer as seguintes alterações.Coloque o seguinte código no seu arquivo styles-21.xml .
@android: cor / transparente
Atribua esse tema à atividade que contém a gaveta de navegação no arquivo AndroidManifest.xml .
Isso fará com que a gaveta de navegação seja renderizada atrás da barra de status transparente.
fonte
Tudo que você precisa fazer é definir essas propriedades no seu tema
fonte
A resposta aceita funcionou para mim usando um CollapsingToolbarLayout. É importante observar, porém, que
setSytstemUiVisibility()
substitui todas as chamadas anteriores para essa função. Portanto, se você estiver usando essa função em outro lugar para a mesma exibição, precisará incluir os sinalizadoresView.SYSTEM_UI_FLAG_LAYOUT_STABLE
eView.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
, ou eles serão substituídos pela nova chamada.Esse foi o meu caso e, depois de adicionar as duas bandeiras ao outro lugar para o qual estava ligando
setSystemUiVisibility()
, a resposta aceita funcionou perfeitamente.fonte
Vou adicionar mais algumas informações aqui. Os desenvolvimentos mais recentes do Android tornaram muito fácil lidar com muitos casos na barra de status. A seguir, minhas observações do
styles.xml
<item name="android:windowTranslucentStatus">true</item>
a barra de status ficará transparente e será exibida na frente da interface do usuário. Sua atividade ocupará todo o espaço da parte superior.Cor do plano de fundo : novamente, para o SDK 21+,
<item name="android:statusBarColor">@color/your_color</item>
basta dar uma cor à sua barra de status, sem afetar mais nada.No entanto, em dispositivos posteriores (Android M / +), os ícones começaram a aparecer em diferentes tons. O sistema operacional pode dar um tom de cinza mais escuro aos ícones do SDK 23 / +, se você substituir o
styles.xml
arquivo navalues-23
pasta e adicioná-lo<item name="android:windowLightStatusBar">true</item>
.Dessa forma, você fornecerá ao usuário uma barra de status mais visível, se a barra de status tiver uma cor clara (pense em como muitos aplicativos do Google têm fundo claro e os ícones ficam visíveis em uma cor acinzentada).
Eu sugiro que você use isso, se você estiver dando cor à sua barra de status pelo ponto # 2
Nos dispositivos mais recentes, o SDK 29 / + vem com um tema claro e escuro amplo do sistema, controlável pelo usuário. Como desenvolvedores, também devemos substituir nosso arquivo de estilo em uma nova
values-night
pasta, para fornecer ao usuário 2 experiências diferentes.Aqui, novamente, eu achei o ponto 2 eficaz para fornecer a "cor de fundo à barra de status". Mas o sistema não estava alterando a cor dos ícones da barra de status para o meu aplicativo. desde que minha versão do dia do estilo consistia em um tema mais claro, isso significa que os usuários sofrerão com baixa visibilidade (ícones brancos sobre fundo mais claro)
Esse problema pode ser resolvido usando a abordagem do ponto 3 ou substituindo o arquivo de estilo na
values-29
pasta e usando um novo api<item name="android:enforceStatusBarContrast">true</item>
. Isso aplicará automaticamente a tonalidade acinzentada aos ícones, se a cor do fundo for muito clara.fonte
Aqui está o tema que eu uso para fazer isso:
fonte
A solução correta é alterar uma propriedade em XML na sua tag Activity para o estilo abaixo. Simplesmente funciona
fonte