web-dev-qa-db-fra.com

Comment changer la couleur du mot de passe basculer dans textuelle?

Je dois changer la couleur du mot de passe basculer dans TextInputLayout si EditText est ciblé ou non. Je l'ai fait de cette façon mais ça ne marche pas. La couleur est toujours égale à la couleur gris clair (de l'état axé = false)

disposition

    <Android.support.design.widget.TextInputLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:passwordToggleEnabled="true"
        app:passwordToggleDrawable="@drawable/password_toggle_selector"
        app:passwordToggleTint="@color/color_password_toggle">

    <Android.support.design.widget.TextInputEditText
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@null"
        Android:inputType="textPassword" />
</Android.support.design.widget.TextInputLayout>

color_password_toggle

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:color="@color/color_green" Android:state_checked="true"  />
    <item Android:color="@color/color_grey" Android:state_focused="true" />
    <item Android:color="@color/color_light_grey" Android:state_focused="false" />

password_toggle_selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:drawable="@drawable/ic_eye" Android:state_checked="true />
    <item Android:drawable="@drawable/ic_eye_off" />
8
druger

J'ai utilisé: App: Passwordtoggletint = "@ Android: Couleur/Noir" Inside TextinCuTlayout

1
ashishdhiman2007

Il semble que lorsque TextInputEditText gagne la mise au point, il ne définit pas TextInputLayout State à state_activated.

Cependant, il est facile de réaliser que si vous créez votre propre version de TextInputEditText.

class MyTextInputEditText : TextInputEditText {
    constructor(context: Context, attrs: AttributeSet) : super(context, attrs)
    constructor(context: Context) : super(context)

    override fun onFocusChanged(focused: Boolean, direction: Int, previouslyFocusedRect: Rect?) {
        super.onFocusChanged(focused, direction, previouslyFocusedRect)
        getTextInputLayout()?.setEndIconActivated(focused)
    }

    //copied from TextInputEditText (why this is private?)
    private fun getTextInputLayout(): TextInputLayout? {
        var parent = parent
        while (parent is View) {
            if (parent is TextInputLayout) {
                return parent
            }
            parent = parent.getParent()
        }
        return null
    }
}

Et fondamentalement, faites ce que @ gabriele-mariotti recommandé, créez un sélecteur combinant Android:state_activated, Android:state_enabled et Android:state_checked Pour vos besoins.

J'ai suggéré une modification de la bibliothèque de matériaux, Vérifiez le PR sur Github.

0
rewgoes

essayez de changer color_password_toggle vers ceci:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:color="@color/color_green" Android:state_checked="true"  />
<item Android:color="@color/color_light_grey" Android:state_checked="false" />

Et vous pouvez supprimer l'icône personnalisée pour utiliser l'icône des yeux par défaut:

<Android.support.design.widget.TextInputLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:passwordToggleEnabled="true"
        app:passwordToggleTint="@color/color_password_toggle">

    <Android.support.design.widget.TextInputEditText
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@null"
        Android:inputType="textPassword" />
</Android.support.design.widget.TextInputLayout>
0
Youssef Amine AMIMI