Quando um EditText está no modo de senha, parece que a dica é mostrada em uma fonte diferente (courrier?). Como posso evitar isso? Gostaria que a dica apareça na mesma fonte que quando o EditText não está no modo de senha.
Meu xml atual:
<EditText
android:hint="@string/edt_password_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:singleLine="true" />
android
fonts
passwords
android-edittext
hpique
fonte
fonte
Respostas:
Alterar o tipo de letra em xml também não funcionou no texto da dica para mim. Encontrei duas soluções diferentes, a segunda com melhor comportamento para mim:
1) Remova
android:inputType="textPassword"
do seu arquivo xml e, em vez disso, configure-o em java:Com essa abordagem, a fonte da dica parece boa, mas enquanto você digita esse campo de edição, você não vê cada caractere em texto sem formatação antes de se transformar em um ponto de senha. Além disso, ao inserir entradas em tela cheia, os pontos não aparecerão, mas a senha em texto não criptografado.
2) Deixe
android:inputType="textPassword"
no seu xml. Em Java, defina TAMBÉM o tipo de letra e passwordMethod:Essa abordagem me deu a fonte da dica que eu queria E me deu o comportamento que eu quero com os pontos da senha.
Espero que ajude!
fonte
password.setTransformationMethod(new PasswordTransformationMethod());
necessário? Parece funcionar bem para mim sem.setTransformationMethod()
. No entanto, existem alguns efeitos colaterais dessa abordagem que a tornam indesejável, pois resulta em um comportamento não padrão comparado aotextPassword
comportamento padrão . Para obter uma solução mais completa, consulte a classe helper em: stackoverflow.com/a/17582092/231078inputType="textPassword"
Encontrei essa dica útil no Dialogs Guide
Por exemplo
fonte
Foi isso que fiz para corrigir esse problema. Por alguma razão, não precisei definir o método de transformação, portanto essa pode ser uma solução melhor:
No meu xml:
No meu
Activity
:fonte
A abordagem setTransformationMethod quebra android: imeOption para mim e permite que os retornos de carro sejam digitados no campo de senha. Em vez disso, estou fazendo o seguinte:
E não estou definindo android: password = "true" em XML.
fonte
A resposta fornecida pelo manisha funciona, mas deixa o campo de senha em um estado não padrão comparado ao padrão. Ou seja, a fonte padrão também se aplica ao campo de senha, incluindo as substituições de pontos e os caracteres de visualização que aparecem antes de serem substituídos pelos pontos (bem como quando é um campo de "senha visível").
Para corrigir isso e fazer com que 1) pareça e atue exatamente como o
textPassword
tipo de entrada padrão , mas também 2) permita que o texto da dica apareça em uma fonte padrão (não monoespaçada), você precisa ter umTextWatcher
campo que possa alternar o fontface adequadamente entreTypeface.DEFAULT
e comTypeface.MONOSPACE
base em se está vazio ou não. Eu criei uma classe auxiliar que pode ser usada para fazer isso:Então, para usá-lo, tudo o que você precisa fazer é chamar o
register(View)
método estático. Todo o resto é automático (incluindo pular a solução alternativa se a exibição não exigir isso!):fonte
EditText
(por exemplo, fazer o texto da dica Roboto Light), a configuraçãoTypeface.DEFAULT
posterior substituirá isso. Eu ligofield.getTypeface()
de frente e uso esse tipo de letra sempre que preciso redefinir a fonte "padrão" posteriormente.field.getTypeface()
não parece ser 100% confiável (como muitas vezes você receberá a fonte monoespaçada), mas a criação de um Typeface viaTypeface.create()
e depois a configuração que parece funcionar bem.Há muitas maneiras de resolver esse problema, mas cada uma delas tem prós e contras. Aqui está o meu teste
Eu só enfrento esse problema de fonte em algum dispositivo (lista no final da minha resposta) ao ativar a senha de entrada por
Se eu usar
android:inputType="textPassword"
, esse problema não aconteceuAlgo que eu tentei
1) Use em
setTransformationMethod
vez dissoinputType
2) Use
Typeface.DEFAULT
sans-serif-light
é uma fonte padrão para todosView
no meu aplicativo => depoissetTypeface(Typeface.DEFAULT)
, aEditText
fonte ainda parece diferente em alguns dispositivos3) Use
android:fontFamily="sans-serif"
MINHA SOLUÇÃO
Testando
algum dispositivo enfrenta problema de fonte
Alguns dispositivos não enfrentam problemas de fonte
fonte
setTransformationMethod
método (onde não enfrentou um problema).setTransformationMethod
funcionará, mas o teclado não será exibido bem. No entanto, se você Oke com ele, ainda Oke porque apenas um pequeno problemaAs outras respostas são a solução certa para a maioria dos casos.
No entanto, se você estiver usando uma
EditText
subclasse personalizada para, por exemplo, aplicar uma fonte personalizada por padrão, há um problema sutil. Se você definir a fonte personalizada no construtor de sua subclasse, ela ainda será substituída pelo sistema se você definirinputType="textPassword"
.Nesse caso, mova seu estilo para
onAttachedToWindow
após asuper.onAttachedToWindow
chamada.Exemplo de implementação:
fonte
Sei que esse pode ser o mais antigo, mas me deparei com algo relacionado a esse problema quando usei
InputType
eapp:passwordToggleEnabled="true"
juntos.Então, escreva isso, pois pode ajudar alguém por aqui.
Quero usar uma fonte personalizada para o campo de senha, juntamente com a
app:passwordToggleEnabled
opção para o meu campo de entrada de senha. Mas na biblioteca de suporte 27.1.1 (enquanto escrevia isso), estava travando.Então o código era como abaixo,
O código acima não foi
inputType
definido em XMLE em Java,
setTransformationMethod
me ajudará a adquirir as propriedades dotextPassword
tipo de entrada e também estou feliz com meu estilo de fonte personalizado.Mas a falha mencionada abaixo ocorreu em todos os níveis da API com a biblioteca de suporte 27.1.1.
Isso estava travando devido à classe
onRestoreInstanceState
internaTextInputLayout
.Reproduzir etapas: alterne a visibilidade da senha, minimize o aplicativo e abra-o nos aplicativos recentes. Uh, ho Crashed!
Tudo o que eu precisava é a opção de alternância de senha padrão (usando a biblioteca de suporte) e a fonte personalizada no campo de entrada de senha.
Depois de algum tempo, resolvi fazer o seguinte,
Em XML, adicionado
android:inputType="textPassword"
No código java acima,
Adquiri o tipo de letra personalizado do nome de usuário
EditText
e o apliqueiTextInputLayout
no campo de senha. Agora você não precisa definir o tipo de letra explicitamente para a senha,EditText
pois ela adquirirá aTextInputLayout
propriedade.Além disso, eu removi
password.setTransformationMethod(new PasswordTransformationMethod());
Dessa maneira,
passwordToggleEnabled
está funcionando, a fonte personalizada também é aplicada e adeus à falha. Espero que esse problema seja corrigido nas próximas versões de suporte.fonte
Você também pode usar um widget personalizado. É muito simples e não bagunça seu código de Atividade / Fragmento.
Aqui está o código:
E seu XML ficará assim:
fonte
TextView
parece substituir o tipo de letra personalizado após a chamada do construtor. Forneceu uma solução alternativa em outra resposta.use a biblioteca de caligrafia .
ainda não atualizará os campos da senha com a fonte correta. faça isso no código e não no xml:
fonte
Recentemente, adicionei a capacidade de ativar / desativar o monoespaço em uma extensão do EditText especificamente para senhas que podem ajudar algumas pessoas. Não usa, por
android:fontFamily
isso é compatível <16.fonte
Você também pode usar o
junto com
fonte
Eu uso essa solução para alternar o tipo de letra dependendo da visibilidade da dica. É semelhante à resposta de Joe, mas estendendo EditText:
fonte
Caso você esteja usando a biblioteca de caligrafia em combinação com um TextInputLayout e um EditText, o código a seguir funciona bem.
fonte
Um caso estranho, talvez, mas eu experimentei isso e descobri que:
alterou o tamanho da fonte da dica em vez da própria fonte! Este ainda é um efeito indesejado. Curiosamente, a operação reversa:
Mantém o mesmo tamanho de fonte.
fonte
Encontrei uma solução certa para esse problema
Melhor maneira de Olá, eu encontrei uma solução certa para este problema
A melhor maneira é criar um editText personalizado e salvar o valor do tipo de letra como temp e, em seguida, aplicar o método às alterações do InputType. Finalmente, atrasamos o valor do tipo de temp para o editText. igual a :
fonte
É assim que criar uma senha de entrada com uma dica que não foi convertida em * e o tipo de letra padrão !!.
No XML:
Na atividade:
agradecimentos a: manga e rjrjr pela compreensão: D.
fonte
como acima, mas verifique se os campos não têm o estilo negrito em xml, pois nunca terão a mesma aparência, mesmo com a correção acima!
fonte