Lorsqu'un EditText est en mode mot de passe, il semble que l'indice soit affiché dans une police différente (courrier?). Comment puis-je éviter ça? Je voudrais que l'indice apparaisse dans la même police que lorsque le EditText n'est pas en mode mot de passe.
Mon xml actuel:
<EditText
android:hint="@string/edt_password_hint"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:password="true"
android:singleLine="true" />
Réponses:
Changer la police de caractères en xml n'a pas fonctionné non plus pour moi sur le texte de l'indice. J'ai trouvé deux solutions différentes, dont la seconde a un meilleur comportement pour moi:
1) Supprimer
android:inputType="textPassword"
de votre fichier xml et au lieu de cela, définissez-le en java:Avec cette approche, la police de conseil semble bonne, mais lorsque vous saisissez ce champ d'édition, vous ne voyez pas chaque caractère en texte brut avant qu'il ne se transforme en point de mot de passe. De plus, lors de la saisie en plein écran, les points n'apparaissent pas, mais le mot de passe en texte clair.
2) Laissez
android:inputType="textPassword"
votre xml. En Java, définissez également la police et le mot de passeCette approche m'a donné la police d'indice que je voulais ET me donne le comportement que je veux avec les points de mot de passe.
J'espère que cela pourra aider!
la source
password.setTransformationMethod(new PasswordTransformationMethod());
nécessaire? Semble bien fonctionner pour moi sans.setTransformationMethod()
non plus. Cependant, il existe certains effets secondaires de cette approche qui la rendent indésirable car elle entraîne un comportement non standard par rapport au comportement par défauttextPassword
. Pour une solution plus complète, consultez la classe d'assistance à: stackoverflow.com/a/17582092/231078inputType="textPassword"
J'ai trouvé cette astuce utile dans le Guide des dialogues
Par exemple
la source
C'est ce que j'ai fait pour résoudre ce problème. Pour une raison quelconque, je n'ai pas eu à définir la méthode de transformation, cela peut donc être une meilleure solution:
Dans mon xml:
Dans mon
Activity
:la source
L'approche setTransformationMethod brise Android: imeOption pour moi et permet de taper les retours chariot dans le champ du mot de passe. Au lieu de cela, je fais ceci:
Et je ne mets pas android: password = "true" en XML.
la source
La réponse fournie par manisha fonctionne, mais elle laisse le champ de mot de passe dans un état non standard par rapport à la valeur par défaut. Autrement dit, la police par défaut s'applique également au champ de mot de passe, y compris les remplacements de points et les caractères d'aperçu qui apparaissent avant d'être remplacés par les points (ainsi que lorsqu'il s'agit d'un champ "mot de passe visible").
Pour résoudre ce problème et le faire 1) ressembler et agir exactement comme le
textPassword
type d'entrée par défaut , mais aussi 2) permettre au texte de conseil d'apparaître dans une police par défaut (non monospace), vous devez avoir unTextWatcher
sur le champ qui peut basculer le fontface correctement dans les deux sens entreTypeface.DEFAULT
etTypeface.MONOSPACE
selon qu'il est vide ou non. J'ai créé une classe d'aide qui peut être utilisée pour accomplir cela:Pour l'utiliser, il vous suffit d'appeler la
register(View)
méthode statique. Tout le reste est automatique (y compris sauter la solution de contournement si la vue ne l'exige pas!):la source
EditText
(par exemple en créant le texte de conseil Roboto Light), un réglageTypeface.DEFAULT
ultérieur remplacera cela. J'appellefield.getTypeface()
à l'avance et utilise cette police chaque fois que j'ai besoin de réinitialiser la police "par défaut" plus tard.field.getTypeface()
ne semblent pas fiables à 100% (comme souvent, vous récupérerez simplement la police à espacement fixe), mais la création d'une police de caractères viaTypeface.create()
puis un paramètre qui semble bien fonctionner.Il existe de nombreuses façons de résoudre ce problème, mais chacune a ses avantages et ses inconvénients. Voici mes tests
Je ne fais face à ce problème de police que sur certains appareils (liste à la fin de ma réponse) lorsque j'active 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) Utilisez
setTransformationMethod
plutôtinputType
2) Utilisation
Typeface.DEFAULT
sans-serif-light
est une police par défaut pour tousView
dans mon application => aprèssetTypeface(Typeface.DEFAULT)
, laEditText
police est toujours différente sur certains appareils3) Utilisation
android:fontFamily="sans-serif"
MA SOLUTION
Test de
certains problèmes de police de visage d'appareil
Certains appareils ne rencontrent pas de problème de police
la source
setTransformationMethod
méthode (où je n'ai pas rencontré de problème).setTransformationMethod
fonctionnera mais le clavier ne s'affichera pas bien. Cependant, si vous oke avec elle, elle oke toujours parce que c'est juste un petit problèmeLes autres réponses sont la bonne solution pour la plupart des cas.
Cependant, si vous utilisez une
EditText
sous-classe personnalisée pour, par exemple, appliquer une police personnalisée par défaut, il y a un problème subtil. Si vous définissez la police personnalisée dans le constructeur de votre sous-classe, elle sera toujours remplacée par le système si vous la définissezinputType="textPassword"
.Dans ce cas, déplacez votre style
onAttachedToWindow
après votresuper.onAttachedToWindow
appel.Exemple d'implémentation:
la source
Je sais que c'est peut-être le plus ancien, mais je suis tombé sur quelque chose en rapport avec ce problème lorsque j'ai utilisé
InputType
etapp:passwordToggleEnabled="true"
ensemble.Donc, écrivez ceci, car cela peut aider quelqu'un ici.
Je veux utiliser une police personnalisée pour le champ de mot de passe ainsi qu'une
app:passwordToggleEnabled
option pour mon champ de saisie de mot de passe. Mais dans la bibliothèque de support 27.1.1 (lors de l'écriture), elle plantait.Donc, le code était comme ci-dessous,
Le code ci-dessus n'a pas
inputType
défini en XMLEt en Java,
setTransformationMethod
cela m'aidera à acquérir les propriétés dutextPassword
type d'entrée et je suis également satisfait de mon style de police personnalisé.Mais le crash mentionné ci-dessous s'est produit à tous les niveaux d'API avec la bibliothèque de support 27.1.1.
Cela plantait à cause de la classe
onRestoreInstanceState
interneTextInputLayout
.Reproduire les étapes: basculez la visibilité du mot de passe et réduisez l'application et ouvrez-la à partir des applications récentes. Euh, ho Crashed!
Tout ce dont j'avais besoin est une option de bascule de mot de passe par défaut (en utilisant la bibliothèque de support) et une police personnalisée dans le champ de saisie du mot de passe.
Après un certain temps, compris en faisant comme ci-dessous,
En XML, ajouté
android:inputType="textPassword"
Dans le code java ci-dessus,
J'ai acquis la police de caractères personnalisée du nom d'utilisateur
EditText
et l' ai appliquée auTextInputLayout
champ de mot de passe. Désormais, vous n'avez plus besoin de définir explicitement la police de caractères sur le motEditText
de passe car elle acquiert laTextInputLayout
propriété.Aussi, j'ai supprimé
password.setTransformationMethod(new PasswordTransformationMethod());
De cette façon,
passwordToggleEnabled
fonctionne, la police personnalisée est également appliquée et bye-bye au crash. J'espère que ce problème sera résolu dans les prochaines versions de support.la source
Vous pouvez également utiliser un widget personnalisé. C'est très simple et cela n'encombre pas votre code d'activité / fragment.
Voici le code:
Et votre XML ressemblera à ceci:
la source
TextView
semble en interne remplacer la police de caractères personnalisée après l'appel du constructeur. A fourni une solution de contournement dans une autre réponse.utilisez la bibliothèque de calligraphie .
alors il ne mettra toujours pas à jour les champs de mot de passe avec la bonne police. faites donc ceci dans le code pas dans xml:
la source
J'ai récemment ajouté la possibilité de basculer monospace on / off sur une extension de EditText spécifiquement pour les mots de passe, cela peut aider certaines personnes. Il n'utilise pas
android:fontFamily
et est donc compatible <16.la source
Vous pouvez également utiliser le
ensemble avec
la source
J'utilise cette solution pour basculer la police de caractères en fonction de la visibilité des indices. C'est similaire à la réponse de Joe, mais en étendant EditText à la place:
la source
Dans le cas où vous utilisez la bibliothèque de calligraphie en combinaison avec un TextInputLayout et un EditText, le code suivant fonctionne bien.
la source
Un cas étrange peut-être, mais j'ai expérimenté cela et j'ai découvert que:
changé la taille de la police de l'indice au lieu de la police elle-même! C'est toujours un effet indésirable. Curieusement, l'opération inverse:
Conserve la même taille de police.
la source
J'ai trouvé une solution sûre à ce problème
La meilleure façon de Bonjour, j'ai trouvé une solution sûre à ce problème
La meilleure façon est de créer un editText personnalisé et d'enregistrer la valeur de la police en tant que temp, puis d'appliquer la méthode aux modifications InputType. Enfin, nous redéfinissons la valeur du type de temp sur le editText. ainsi :
la source
Voici comment créer un mot de passe qui a un indice qui n'a pas été converti en * et une police par défaut !!.
Sur XML:
En activité:
merci à: mango et rjrjr pour la perspicacité: D.
la source
comme ci-dessus mais assurez-vous que les champs n'ont pas le style gras en xml car ils ne seront jamais identiques même avec le correctif ci-dessus!
la source