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" />
J'ai utilisé: App: Passwordtoggletint = "@ Android: Couleur/Noir" Inside TextinCuTlayout
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.
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>