Indication de mot de passe de la police dans Android
Lorsqu'un EditText est en passe de mode, il semble que l'indicateur est affiché dans une police différente (courrier?). Comment puis-je éviter cela? Je voudrais l'indice de figurer dans la même police que lorsque l'EditText n'est pas de mot de passe de mode.
Mon xml en cours:
<EditText
android:hint="@string/edt_password_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:singleLine="true" />
- Notez que tous les périphériques se comporter de cette façon. Le "HTC One X @ 4.1.1" n' (monospace). "Samsung GT-7510 @4.0.4" ne fonctionne pas. (même police)
- Même comportement sur LeWa OS 4.2.2. Trop de façon incohérente API..
- il existe encore dans l'sucette aussi
- vous pouvez le vérifier ma réponse ici j'espère que ça fonctionne.
Vous devez vous connecter pour publier un commentaire.
De changer la police de caractères dans le format xml n'a pas de travail sur le texte d'instruction pour moi non plus. J'ai trouvé deux solutions différentes, la seconde a un meilleur comportement pour moi:
1) Supprimer
android:inputType="textPassword"
à partir de votre fichier xml et au lieu de cela, dans le régler en java:Avec cette approche, l'indice de la police semble bon, mais comme vous êtes à taper dans ce champ d'édition, vous ne voyez pas chaque caractère du texte brut avant qu'il se transforme en un mot de passe point. Aussi lors de la prise de d'entrée en plein écran, les points n'apparaissent pas, mais le mot de passe en texte clair.
2) Laisser
android:inputType="textPassword"
dans votre xml. En Java, AUSSI définir la police et passwordMethod:Cette approche m'a donné l'astuce de la police que je voulais ET me donne le comportement que je veux avec le mot de passe de points.
Espère que ça aide!
password.setTransformationMethod(new PasswordTransformationMethod());
nécessaire? Semble bien fonctionner pour moi sans.setTransformationMethod()
appel n'est pas vraiment nécessaire siandroid:password="true"
est défini dans le fichier xml.setTransformationMethod()
soit. Cependant, il ya certains effets secondaires de cette approche, qui font qu'il est indésirable, car il en résulte une non-standard de comportement par rapport à la valeur par défauttextPassword
comportement. Pour une solution plus complète, voir la classe helper sur: stackoverflow.com/a/17582092/231078inputType="textPassword"
inputType=textPassword
semble avoir un effet secondaire: Le clavier offre une majuscule pour la première lettre,textPassword
être raccourci pourTYPE_TEXT_VARIATION_PASSWORD | TYPE_CLASS_TEXT
(128 + 1). Le paramètreTYPE_TEXT_VARIATION_PASSWORD
seulement l'en empêche.J'ai trouvé cette astuce utile de Les Dialogues Guide
Par exemple
C'est ce que j'ai fait pour résoudre ce problème. Pour une raison que je n'ai pas à définir la méthode de transformation et c'est peut-être une meilleure solution:
Dans mon xml:
Dans mon
Activity
:La setTransformationMethod approche des pauses android:imeOption pour moi, et permet des retours chariot à être saisie dans le champ mot de passe. Au lieu de cela, je suis en train de faire ceci:
Et je suis pas le paramètre android:mot de passe="true" dans le XML.
La réponse manisha fourni fonctionne, mais il laisse le champ mot de passe dans un autre état par rapport à la valeur par défaut. C'est, par défaut fontface puis s'applique également pour le champ mot de passe, y compris le point de remplacements et de l'aperçu de caractères qui s'affiche avant d'être remplacé par des points (comme lorsqu'il est "visible champ mot de passe).
Pour résoudre ce problème et rendre 1) examiner et d'agir exactement comme la valeur par défaut
textPassword
type d'entrée, mais aussi 2) permettre à l'indice de texte par défaut (non-monospace) la police, vous devez avoir unTextWatcher
sur le terrain qui permet de basculer la fontface correctement-et-vient entreTypeface.DEFAULT
etTypeface.MONOSPACE
selon si elle est vide ou pas. J'ai créé une classe d'assistance qui peuvent être utilisés pour la réaliser:Puis à l'utiliser, tout ce que vous devez faire est d'appeler la
register(View)
méthode statique. Tout le reste est automatique (y compris sauter la solution de contournement si la vue n'en a pas besoin!):EditText
(p. ex. faire de l'indice de texte Roboto la Lumière), alors la configuration de laTypeface.DEFAULT
plus tard remplace ce. J'appellefield.getTypeface()
à l'avant et d'utiliser cette police de caractères à chaque fois que j'ai besoin de réinitialiser le "défaut" de la police plus tard.field.getTypeface()
ne semble pas être fiable à 100% (comme souvent, vous allez juste en arrière de la police à espacement fixe), mais la création d'une Police de caractères viaTypeface.create()
et puis paramètre qui semble bien fonctionner.Il y a plusieurs façons de résoudre ce problème, mais chaque sorte ont des avantages et des inconvénients. Voici mes tests
Je ne visage ce problème de police dans un certain dispositif (liste à la fin de ma réponse) lorsque l'option activer le mot de passe d'entrée en
Si j'utilise
android:inputType="textPassword"
, ce problème ne s'est pas produitQuelque chose que j'ai essayé
1) Utilisation
setTransformationMethod
au lieuinputType
2) Utiliser
Typeface.DEFAULT
sans-serif-light
est une police par défaut pour tous lesView
dans ma demande => aprèssetTypeface(Typeface.DEFAULT)
, leEditText
police cherche toujours différents dans un certain dispositif3) Utilisation
android:fontFamily="sans-serif"
MA SOLUTION
Tests
Certains appareil face problème de police
Certains dispositif pas confrontés à des problèmes de polices
setTransformationMethod
méthode (si ce n'est face à un problème).setTransformationMethod
va travailler mais le clavier n'affiche pas bien. Toutefois, si vous oke avec, il toujours oke, car il a juste un petit problèmeAutres réponses sont la bonne solution pour la plupart des cas.
Toutefois, si vous êtes en utilisant une mesure
EditText
sous-classe, par exemple, appliquer une police personnalisée par défaut, il y a une subtile question. Si vous définissez la police par défaut dans le constructeur de votre sous-classe, il sera toujours remplacé par le système si vous définissezinputType="textPassword"
.Dans ce cas, déplacez votre style de
onAttachedToWindow
après votresuper.onAttachedToWindow
appel.Exemple de mise en œuvre:
Vous pouvez également utiliser un Widget personnalisé. C'est très simple et il ne faut pas encombrer votre Activité/Fragment de code.
Voici le code:
Et votre XML ressemble à ceci:
TextView
semble écraser la coutume de police après l'appel du constructeur. Fourni une solution de contournement dans une autre réponse.Je sais que cela peut être le plus vieux, mais j'ai bosse dans quelque chose lié à ce problème lorsque j'ai utilisé
InputType
etapp:passwordToggleEnabled="true"
ensemble.Donc, écrit ceci, car il peut aider quelqu'un d'ici.
Je veux utiliser une police personnalisée à champ mot de passe avec
app:passwordToggleEnabled
option pour mon mot de passe champ de saisie. Mais dans 27.1.1 (alors que j'écris ces lignes) bibliothèque de prise en charge, il a été s'écraser.De sorte que le code était comme ci-dessous,
Code ci-dessus n'ont pas
inputType
défini en XMLEt en Java,
setTransformationMethod
va m'aider à acquérir les propriétés detextPassword
type d'entrée et aussi, je suis heureux que mon custom style de police.Mais les mentionnés ci-dessous crash qui s'est passé dans toutes les API niveaux avec 27.1.1 bibliothèque de prise en charge.
Cela a été s'écraser en raison de la
onRestoreInstanceState
à l'intérieur deTextInputLayout
classe.Reproduire Suit: Basculer le mot de passe de visibilité et de réduire l'application et ouvert des applications récentes. Euh,ho s'est Écrasé!
Tout ce que je besoin est mot de passe par défaut option de bascule (avec le soutien de la bibliothèque) et de la police personnalisée dans le champ mot de passe.
Après un certain temps, compris en procédant comme ci-dessous,
En XML, ajouté
android:inputType="textPassword"
Ci-dessus dans le code java,
J'ai acquis la coutume de caractères de nom d'utilisateur
EditText
et l'a appliqué àTextInputLayout
le champ mot de passe. Maintenant, vous n'avez pas besoin de définir la police de caractère explicitement le mot de passeEditText
qu'elle fera l'acquisition de l'TextInputLayout
de la propriété.Aussi, j'ai enlevé
password.setTransformationMethod(new PasswordTransformationMethod());
En procédant de cette façon,
passwordToggleEnabled
est au travail, la police personnalisée est également appliqué et bye-bye à l'accident. Espérons que ce problème sera résolu dans les prochains communiqués de soutien.utiliser le calligraphie de la bibliothèque.
elle a néanmoins l'habitude de mettre à jour les champs de mot de passe avec la bonne police. afin de faire cela dans le code pas en xml:
J'ai récemment ajouté la possibilité de changer de bascule monospace/arrêt pour une extension de EditText spécifiquement pour les mots de passe, il peut aider certaines personnes. Il n'utilise pas
android:fontFamily
est donc compatible <16.Vous pouvez également utiliser le
avec
J'utilise cette solution pour basculer de la Police de caractères en fonction de l'indice de visibilité. Il est similaire à la réponse de Joe, mais en l'étendant EditText à la place:
Dans le cas où vous êtes à l'aide de la calligraphie de la bibliothèque en combinaison avec un TextInputLayout et un EditText, le code suivant fonctionne bien.
Un cas est peut-être bizarre, mais j'ai expérimenté avec ce et a trouvé que:
changé le taille de la police de la pointe à la place de la police elle-même! C'est encore un effet indésirable. Assez étrangement, l'opération inverse:
Garde la même taille de police.
J'ai trouvé un certain solution à ce problème
Meilleure façon de le Bonjour ,j'ai trouvé un certain solution à ce problème
La meilleure façon est de créer un editText et enregistrer la valeur de la police comme un temp et ensuite appliquer la méthode à la InputType changements , Enfin, nous avons fixé la valeur de temp type face à l'editText. comme :
Cette façon de faire mot de passe d'entrée qui a un indice qui ne converti à * et de défaut de caractère !!.
Sur XML :
Sur L'Activité :
grâce à : la mangue et le rjrjr pour le comprendre :D.
comme ci-dessus, mais assurez-vous que les champs n'ont pas le style gras dans le xml comme ils ne regarderez plus jamais la même, même avec le correctif ci-dessus!