Estou atualizando meu aplicativo com a nova barra de ferramentas da biblioteca de suporte v21. Meu problema é que a barra de ferramentas não lança sombra se eu não definir o atributo "elevação". Esse é o comportamento normal ou estou fazendo algo errado?
Meu código é:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/my_awesome_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
android:elevation="4dp"
android:minHeight="?attr/actionBarSize"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<FrameLayout
android:id="@+id/FrameLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent">
.
.
.
E no meu método Activity - OnCreate:
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar);
setSupportActionBar(toolbar);
android
android-5.0-lollipop
material-design
android-toolbar
Sr. Brightside
fonte
fonte
Respostas:
Acabei definindo minha própria sombra para a barra de ferramentas, achei que poderia ser útil para quem estava procurando:
@ drawable / toolbar_dropshadow:
@ color / color_alizarin
fonte
android:layout_height="4dp"
a altura da sombra, em vez de5dp
. Na verdade, a elevação é a mesma que a altura da sombra que você definiuFrameLayout
.O Google lançou a biblioteca de suporte de design há algumas semanas e existe uma solução bacana para esse problema nessa biblioteca.
Adicione a biblioteca Design Support como uma dependência em
build.gradle
:Adicione
AppBarLayout
fornecido pela biblioteca como um invólucro ao redor do seuToolbar
layout para gerar uma sombra projetada.Aqui está o resultado:
Existem muitos outros truques com a biblioteca de suporte ao design.
AndroidX
Como acima, mas com dependência:
e
com.google.android.material.appbar.AppBarLayout
fonte
AppBarLayout
como um invólucro ao redor doToolbar
não define nenhuma sombra para mim. Observe que eu não uso uma gaveta de navegação. Alguma idéia de por que não funciona?Você não pode usar o atributo de elevação antes da API 21 (Android Lollipop). No entanto, você pode adicionar a sombra programaticamente, por exemplo, usando uma exibição personalizada colocada abaixo da Barra de Ferramentas.
@ layout / barra de ferramentas
@ drawable / toolbar_dropshadow
no seu layout de atividade
<include layout="@layout/toolbar" />
fonte
@layout/toolbar
exemplo com o arquivo de layout completo?Use as pastas / values para aplicar o estilo de sombra correto com base na versão do sistema operacional.
Para dispositivos abaixo de 5.0 , use /values/styles.xml para adicionar windowContentOverlay ao corpo da sua atividade:
Em seguida, adicione sua própria sombra personalizada alterando seu Tema para incluir:
Você pode pegar o recurso de sombra do aplicativo IO do Google aqui: https://github.com/google/iosched/blob/master/android/src/main/res/drawable-xxhdpi/bottom_shadow.9.png
Para dispositivos 5.0 e posteriores , use /values-v21/styles.xml para adicionar elevação à sua barra de ferramentas usando um estilo de cabeçalho personalizado:
Observe que, no segundo caso, eu tive que criar um estilo MyViewArea vazio para que o windowContentOverlay não aparecesse também.
[Atualização: nomes de recursos alterados e adição de sombra do Google.]
fonte
android:foreground
só funciona no FrameLayout antes da API 23.Isso funcionou muito bem para mim:
fonte
Se você estiver configurando o
ToolBar
asActionBar
, basta ligar para:Nota: Isso deve ser chamado após
setSupportActionBar(toolbar);
fonte
setElevation()
é definido apenas para API-21 +.ViewCompat.setElevation()
e, portanto, funcionará apenas na API 21 ou superior.Eu adicionei
na descrição da barra de ferramentas e funciona para mim. Usando 5.0+
fonte
Esse é o comportamento normal. Consulte também as perguntas frequentes no final deste post .
fonte
Estava brincando com isso por horas, eis o que funcionou para mim.
Remova todos os
elevation
atributos dos widgetsappBarLayout
eToolbar
(incluindostyles.xml
se você estiver aplicando algum estilo).Agora dentro da atividade, aplique o
elvation
em seuactionBar
:Isso deve funcionar.
fonte
setElevation
aceita um parâmetro como pixels. Você precisa convertê-lo adequadamente, por exemplo:(int) (3.0 / Resources.getSystem().getDisplayMetrics().density)
Você também pode fazê-lo funcionar
RelativeLayout
. Isso reduz um pouco o layout do layout;)fonte
Tudo que você precisa é
android:margin_bottom
igual aoandroid:elevation
valor. NãoAppBarLayout
,clipToPadding
etc. é necessário.Exemplo:
fonte
Para 5.0 +: você pode usar o AppBarLayout com a Barra de Ferramentas. AppBarLayout tem atributo "elevação".
fonte
actionbar_background.xml
adicionar ao plano de fundo actionbar_style
name = "displayOptions"> useLogo | showHome | showTitle | showCustom
adicionar ao Basetheme
fonte
A maioria das soluções funciona bem aqui. Gostaria de mostrar outra alternativa semelhante:
gradle:
Seu layout pode ter uma Visualização da barra de ferramentas e uma sombra para ela, abaixo, semelhante a esta (é necessário modificar, é claro):
res / drawable-v21 / toolbar_action_bar_shadow.xml
res / drawable / toolbar_action_bar_shadow.xml
res / drawable / msl__action_bar_shadow.xml
styles.xml
MainActivity.kt
Exemplo completo aqui , como observei que o IDE tem um erro ao dizer que o
foreground
atributo é muito novo para ser usado aqui.fonte
Eu tive um problema semelhante com a sombra. A sombra é desenhada pelo pai direto do AppBarLayout no meu caso. Se a altura do pai for a mesma do AppBarLayout, a sombra não poderá ser desenhada. Portanto, verificar o tamanho do layout pai e talvez o remake do layout possam resolver o problema. https://www.reddit.com/r/androiddev/comments/6xddb0/having_a_toolbar_as_a_fragment_the_shadow/
fonte
A resposta correta será adicionar
android: backgroundTint = "# ff00ff" à barra de ferramentas com android: background = "@ android: color / white"
Se você usar outra cor, em seguida, branco para o fundo, ela removerá a sombra. Bom Google!
fonte