Depois de usar a Android Design Support Library TextInputLayout
para colocar um rótulo flutuante acima de um EditText
componente, eu queria saber se há uma maneira de adicionar um rótulo flutuante ao Spinner
componente (não necessariamente usando a Design Library).
Com isso, quero dizer algo como um TextView
colocado acima de Spinner
(obviamente não há animações como o TextInputLayout
), mas quero que o tamanhoTextInputLayout
do texto, a fonte e a cor correspondam aos do rótulo flutuante de .
Por exemplo, seria algo assim (veja os rótulos acima dos Spinner
s):
Como mencionei antes, meu principal objetivo é ter um rótulo acima do Spinner
, assim como no TextInputLayout
- então o tamanho do texto, a fonte, a cor e as distâncias entre o rótulo e o componente seriam os mesmos.
Na página de Design do Google sobre campos de texto de rótulo flutuante , há um diagrama que mostra as dimensões do rótulo em relação ao componente, mas não há indicação da cor ou tamanho do texto do rótulo:
Portanto, para resumir, estou perguntando:
- Se existe um componente especial para alcançar o que estou pedindo ou uma visualização personalizada que posso usar, o que seria e como posso usá-lo.
- Se não, qual é o tamanho, cor e fonte do texto do rótulo flutuante, para que eu possa colocar um TextView
acima do meu Spinner
com as dimensões do layout mostradas na imagem acima.
EDITAR:
A partir das diretrizes de design do Google para campos de texto , tem o seguinte para rótulos flutuantes:
Dica e fonte de entrada: Roboto Regular 16sp
Fonte do rótulo: Roboto Regular 12sp
Altura do bloco: 72dp Preenchimento
superior e inferior do
texto : 16dp Preenchimento do divisor do campo de texto: 8dp
bem como as imagens mostradas acima.
Portanto, a fonte do rótulo flutuante é: Roboto Regular 12sp . Portanto, você pode usar um TextView
para exibir o Spinner
rótulo, pois não conheço nenhum View
s personalizado ou componente especial que você possa usar.
No entanto , depois de experimentá-lo, ele não parece tão bom quanto o exemplo mostrado na imagem. Uma visualização personalizada pode ser melhor para isso , pois poderia parecer mais agradável, mas a solução acima é apenas uma maneira de conseguir algo próximo ao que eu queria originalmente.
fonte
<item name="android:textColor">?android:textColorHint</item>
seu estilo para obter a mesma cor de texto no rótulo personalizado usado em TextInputLayout no estado desfocado.SpinnerLabel
vez deInputLabel
usá-lo apenas para spinners.Eu tenho uma ideia feita por mim mesmo para resolver o mesmo problema que você tem.
Confira:
https://gist.github.com/rodrigohenriques/77398a81b5d01ac71c3b
Agora eu não preciso de spinners. Você ainda terá efeito de rótulo flutuante com animações incluídas.
fonte
setInputType(InputType.TYPE_NULL);
aoonDraw(canvas)
método para desativar qualquer entrada no texto de edição. Caso contrário, por exemplo, cliques longos abrirão um menu de contexto e permitirão ao usuário colar o texto.EditText
ouAppCompatEditText
, por favor!Consegui isso usando um AutoCompleteTextView, desabilitando o teclado e mostrando as opções de toque.
fonte
TextInputLayout
, garantindo assim que você terá a aparência correta exata.R.layout.support_simple_spinner_dropdown_item
vez deandroid.R.layout.simple_spinner_item
mTextView.setText(...)
, não receberá todos os valores do adaptador no menu suspenso ... A chamadaadapter.getFilter().filter(null);
mostra novamente todas as sugestõesCriei um
View
componente composto que exibe um rótulo acima deSpinner
. O texto do rótulo pode ser definido usando XML ou em Java.O componente possui os principais recursos de um
Spinner
( não todos ), além de ser semelhante aoTextInputLayout
componente.Eu o chamei de
LabelledSpinner
e ele está disponível como parte da minha biblioteca UsefulViews Android no GitHub sob a licença Apache 2.0 .Para usá-lo, adicione a dependência da biblioteca em seu
build.gradle
arquivo:Exemplos de seu uso estão disponíveis no repositório GitHub (um aplicativo de amostra e um guia de uso).
fonte
Spinner
, que é semelhante a como existem pequenas etiquetas acima dosEditText
componentes, embrulhadosTextInputLayout
. Como você imaginou que seria?Modifiquei a solução do Rodrigo para usar um adaptador, ou seja, mais parecido com um Spinner padrão https://gist.github.com/smithaaron/d2acd57937d7a4201a79
fonte
Eu tenho uma solução alternativa que usa o comportamento de TextInputLayout e um DialogFragment personalizado (AlertDialog) para emular um pop-up de diálogo giratório.
layout.xml:
Crie spinner personalizado via DialogFragment (AlertDialog)
SpinnerFragment.java:
}
Activity.java:
Resultado
Quando você clica no TextInputLayout com estilo giratório, ele aciona uma caixa de diálogo de alerta contendo sua lista de seleções. Assim que uma seleção for escolhida, o EditText será preenchido com sua seleção e o rótulo irá flutuar como você deseja.
fonte
android:focusable="false"
torna essa visualização inacessível para quem usa teclado ou voz para interagir com o aplicativo?android:focusable="false"
é para que o usuário não possa digitar uma entrada que não esteja entre a seleção. Infelizmente, não tenho um telefone físico Android para testar os comportamentos para que você saiba.Aqui está o meu truque,
o bom é que tudo funcionará como você deseja,
mas o ruim é que isso está aumentando a hierarquia de layout e você tem que lidar com a funcionalidade no código, e é uma solução feia:
e substituir o adaptador para girador, para tornar os valores selecionados transparentes
e depois de selecionar no botão giratório, apenas pegue o texto selecionado e configure-o para EditText e ele terá o mesmo efeito com animação
se você tem alguma dúvida me pergunte
fonte
Você pode conseguir isso:
Com novos estilos de biblioteca de materiais como este:
para mais informações: https://material.io/develop/android/components/menu/
fonte
Aqui está uma biblioteca que eu uso para a Biblioteca de materiais Floating label spinner rey5137
Além disso, para referência futura, aqui está uma lista de algumas ótimas bibliotecas. Bibliotecas de UI Bibliotecas principais
fonte
SpinnerCustom.java
layout_spinner_custom.xml
style.xml
fonte