Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Ex. 3 da Aula 3 - Utilizandos menus

Bom dia a todos,

Eu resolvi fazer uma variação visual do meu botão colocando um fundo gradiente ao invés de uma cor sólida. A implementação do arquivo de fundo ficou da seguinte forma:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <gradient
        android:centerX="50%"
        android:centerY="50%"
        android:endColor="#2f62ff"
        android:startColor="#6a91ff"
        android:gradientRadius="100"
        android:type="radial" />
</shape>

A questão é: Quando eu testei numa imagem de API lv 23, o fundo do meu botão ficou em gradiente. No entanto, quando testei diretamente no meu celular, API lv 21 o fundo do botão não ficou gradiente, ficou com a cor do android:startColor="#6a91ff". E, por mais estranho que pareça, funcionou num emulador de API 15!??!

Esse problema está relacionado com a versão da API, como suspeito, ou está faltando alguma coisa na minha configuração?

a configuração do botão:

    <Button
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:text="+"
        android:textSize="40sp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentRight="true"
        android:layout_marginBottom="16dp"
        android:layout_marginRight="16dp"
        android:textColor="#ffffff"
        android:background="@drawable/botao_fundo"
        android:elevation="6dp"
        android:stateListAnimator="@null"/>

Outro problema relacionado, é que o sombreamento do botão não apareceu numa imagem de API abaixo de 19, mesmo com o android:stateListAnimator="@null"/>.

2 respostas
solução!

Olá Bruno!

Esse problema do gradiente é um bug conhecido do Android 5 Lollipop. (link para o bug: https://code.google.com/p/android/issues/detail?id=77862).

O problema está relacionado de alguma forma com o raio do gradiente. A solução recomendada é alterar o gradient radius para 50%p (o valor 50% pode ser alterado) somente para a versão 21 da API do Android. Para isso, crie um outro XML com o mesmo nome para o fundo do botão na pasta drawable-v21. Dessa forma, se você estiver na versão 21, o XML da pasta drawable-v21 será utilizado. Caso contrário, ele utilizará o XML que está na pasta drawable.

Já o problema da sombra pode ser resolvido utilizando o novo componente Floating Action Button disponibilizado na biblioteca Android Design Support. Veja a minha resposta para essa dúvida onde detalho melhor o uso desse novo componente:

https://www.alura.com.br/course/android-studio-do-zero-a-persistencia/discussions/670627

Abraço!

Opa Jeferson,

O problema do gradiente foi resolvido, valeu. Com relação a esse novo componente, não parece ser tão simples assim de implementa-lo, pelo menos eu não consegui, apesar de não ter persistido o suficiente.

Mas de toda forma, valeu.