Recentemente, li esses posts:
Biblioteca de suporte do Android Design
Biblioteca de suporte do Android, revisão 22.2.0
Mas nenhum deles me fornece um exemplo detalhado de como criar um novo FloatingActionButton
. Tão difícil de entender, eu faço essa pergunta.
Alguém pode me dar um exemplo disso?
Qualquer ajuda será muito apreciada. Desde já, obrigado.
EDITAR
Acabei de encontrar alguns problemas no FloatingActionButton
(FAB) e quero melhorar outra resposta. Veja minha resposta abaixo.
Respostas:
Então, no seu
build.gradle
arquivo, adicione isto:AndroidX Nota: o Google está introduzindo novas bibliotecas de extensão AndroidX para substituir as bibliotecas de suporte mais antigas. Para usar o AndroidX, primeiro verifique se você atualizou seu
gradle.properties
arquivo , editebuild.gradle
para definircompileSdkVersion
como28
(ou superior) e use a linha a seguir, em vez da linha anteriorcompile
.Em seguida, no seu
themes.xml
ou no questyles.xml
for, certifique-se de definir isso - é a cor de destaque do seu aplicativo - e a cor do seu FAB, a menos que você o substitua (veja abaixo):No XML do layout:
Ou, se você estiver usando a biblioteca de materiais AndroidX acima, use o seguinte:
Você pode ver mais opções nos documentos ( documentos materiais aqui) (
setRippleColor
, etc.), mas uma das notas é:Outro interessante - para alterar a cor de fundo de apenas um FAB, adicione:
(por exemplo, para alterá-lo para vermelho) no XML acima.
De qualquer forma, no código, após a exibição da Atividade / Fragmento ser inflada ....
Observações:
Aqui está uma maneira de remover ou alterar o preenchimento se houver muito:
Além disso, eu colocaria programaticamente a FAB na "costura" entre duas áreas em um RelativeLayout agarrando a altura da FAB, dividindo por duas e usando-a como deslocamento de margem. Mas myFab.getHeight () retornou zero, mesmo depois que a exibição foi inflada, parecia. Em vez disso, usei um ViewTreeObserver para obter a altura somente após o layout e depois definir a posição. Veja esta dica aqui . Parecia assim:
Não tenho certeza se esse é o caminho certo para fazê-lo, mas parece funcionar.
Se você deseja o FAB em uma "costura", pode usar
layout_anchor
elayout_anchorGravity
aqui está um exemplo:Lembre-se de que você pode fazer com que o botão salte automaticamente quando um Snackbar aparecer, envolvendo-o em um CoordinatorLayout .
Mais:
fonte
android:backgroundTint="#FF0000"
por exemplo, ao FloatingActionBar no XML. (adicionando a resposta)sp
na propriedade evelation. Deveria serapp:elevation="4dp"
FloatingActionButton
a umCoordinatorLayout
, você pode usarapp:layout_anchor="element_with_seam"
eapp:layout_anchorGravity="bottom|right|end"
para posicionar a FAB corretamente sobre uma costura - ver a disposição activity_detail de cheesesquareAcabei de encontrar alguns problemas na FAB e quero melhorar outra resposta.
Problema setRippleColor
Portanto, o problema surgirá assim que você definir a cor de ondulação (cor FAB pressionada) programaticamente
setRippleColor
. Mas, ainda temos uma maneira alternativa de configurá-lo, ou seja, chamando:Seu projeto precisa ter esta estrutura:
E o código de
fab_ripple_color.xml
é:Por fim, altere ligeiramente o seu FAB:
Para o nível 21 da API e superior, defina a margem direita e inferior como 24dp:
Guias de design do FloatingActionButton
Como você pode ver no meu código xml da FAB acima, defino:
Ao definir esses atributos, você não precisa set
layout_marginTop
elayout_marginRight
novamente (apenas na pré-Lollipop). O Android o colocará automaticamente no lado direito da tela, o mesmo que o FAB normal no Android Lollipop.Ou você pode usar isso em
CoordinatorLayout
:elevation
e 12dppressedTranslationZ
, de acordo com este guia do Google.fonte
pressedTranslationZ
. Eu não sabia disso.app:elevation
eapp:pressedTranslationZ
valores. Seu valor padrão é o definido nas diretrizes de design de materiais. Enfim, e.shishkin está certo, os valores sãoapp:elevation:6dp
epressedTranslationZ:6dp
. Você pode verificá-lo no código fonteFloatingActionButton
se estendeImageView
. Portanto, é simples como introduzir umImageView
no seu layout. Aqui está uma amostra XML.app:borderWidth="0dp"
é adicionado como uma solução alternativa para problemas de elevação.fonte
para AndroidX use como
fonte
Se você já adicionou todas as bibliotecas e ainda não funciona, use:
ao invés de:
E tudo vai funcionar bem :)
fonte