2017-09-22 2 views
1

Je suis en train de basculer entre l'ancienne manière d'afficher un mot de passe avec l'expression databinding suivante:Comment configurer Android: inputType grâce à Databinding

android:password="@{isMyFlagTrue}" 

Cependant, lorsque je tente d'utiliser le inputType au lieu du présent attribut de mot de passe obsolète, je n'arrive pas à définir correctement le type de mot de passe. J'ai essayé:

android:inputType="@{isMyFlagTrue? InputType.TYPE_TEXT_VARIATION_PASSWORD : InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)}" 

Mais cela fait aucun effet sur le inputType de la vue EditText. Même lorsque j'essaie de le placer directement sur la variété invisible, il est toujours visible.

Des suggestions?

+0

Vous pouvez simplement ajouter un TextWatcher à votre EditText et gérer l'entrée vous-même. Beaucoup plus facile et personnalisable. –

+0

Oui mais NJ un texWatcher prend juste une valeur 'Editable s'. Cependant, le type d'entrée dépend de quelque chose en dehors de la portée de l'inputString – Thalatta

+1

Merci d'avoir clarifié. Je suggérais seulement que vous pouvez utiliser TextWatcher pour interpréter l'entrée avant qu'elle ne soit affichée dans le champ de saisie, et la remplacer par une marque astérisque, tandis que l'on peut stocker la valeur dans une variable locale. –

Répondre

1

Vous pouvez définir le type d'entrée utiliser des données comme liant

<EditText 
    ... 
    android:inputType='@{condition ? (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) : InputType.TYPE_CLASS_TEXT }' 
    /> 
+0

@Phan_Van_Linh est-ce un OU inclusif qui est représenté par '|'? Qu'est-ce que ça fait? – Thalatta

+0

C'est ainsi que nous définissons inputType programmaticalyl: https://stackoverflow.com/questions/2586301/set-inputtype-for-an-edittext. Ensuite, lors de l'utilisation de la liaison de données, nous devrions faire comme –