Cambiar el color del selector de contraseña de máscara

introduzca la descripción de la imagen aquí

Como se puede ver en la foto tengo una aplicación para Android con un fondo negro y texto blanco. Sin embargo, hay de hecho un icono de "Mostrar texto" que se parece a un "ojo" y es negro también 🙁 ¿Hay manera de cambiar el color de este?

Activity_login.xml

<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:fitsSystemWindows="true" android:background="@color/black"> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingTop="56dp" android:paddingLeft="24dp" android:paddingRight="24dp"> <ImageView android:src="@drawable/logo" android:layout_width="wrap_content" android:layout_height="72dp" android:layout_marginBottom="24dp" android:layout_gravity="center_horizontal" /> <!-- Email Label --> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginBottom="8dp" android:textColorHint="#ffffff"> <EditText android:id="@+id/input_email" android:theme="@style/MyEditTextTheme" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textEmailAddress" android:hint="E-Mail Address"/> </android.support.design.widget.TextInputLayout> <!-- Password Label --> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:layout_marginBottom="8dp" android:textColor="#ffffff" android:textColorHint="#ffffff"> <EditText android:id="@+id/input_password" android:theme="@style/MyEditTextTheme" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textPassword" android:hint="Password"/> </android.support.design.widget.TextInputLayout> <android.support.v7.widget.AppCompatButton android:id="@+id/btn_login" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="24dp" android:layout_marginBottom="24dp" android:padding="12dp" android:text="Login"/> <TextView android:id="@+id/link_signup" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="24dp" android:text="No account yet? Create one" android:textColor="#ffffff" android:gravity="center" android:textSize="16dip"/> </LinearLayout> </ScrollView> 

strings.xml

 <resources> <color name="bg_color">#ffffff</color> <color name="black">#222222</color> <style name="MyEditTextTheme"> <item name="colorControlNormal">#ffffff</item> <item name="colorControlActivated">#ffffff</item> <item name="colorControlHighlight">#ffffff</item> <item name="colorAccent">@android:color/white</item> <item name="android:textColor">#ffffff</item> <item name="android:textColorHint">#ffffff</item> </style> </resources> 

Ok chicos que encontré la respuesta correcta, hay una manera de personalizar el color de la misma. https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html#attr_android.support.design:passwordToggleTint

 setPasswordVisibilityToggleTintList(ColorStateList) 

Actualización: puede agregar directamente el siguiente atributo en TextInputLayout:

 app:passwordToggleTint="#FFF" 

La respuesta de rapid3642 apuntaba en la dirección correcta pero todavía necesitaba averiguar qué funcionaría exactamente.

Siga estos pasos para cambiar el color de su palanca:

  1. Cree selector_password_visibility_toggle en ~/res/color/ :

     <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- When password is shown as text, the drawable will be off_white coloured --> <item android:color="@color/off_white" android:state_checked="true"/> <item android:color="@android:color/white"/> </selector> 
  2. Agregue passwordToggleTintMode y passwordToggleTint a su TextInputLayout , como se muestra a continuación:

     <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:passwordToggleTintMode="src_atop" app:passwordToggleTint="@color/selector_password_visibility_toggle" app:passwordToggleEnabled="true"> 

Ahora su TextInputLayout tendrá su color dibujable cambiado.

Agregue la siguiente aplicación xmlns: app en su diseño.

xmlns:app="http://schemas.android.com/apk/res-auto"

Ahora configure passwordToggleEnabled y passwordToggleTint en EditText en consecuencia

app:passwordToggleEnabled = "true"
app:passwordToggleTint="#FFFFFF"

Añadir selector.xml archivo selector.xml :

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/dim_orange_btn_pressed" /> <item android:state_focused="true" android:drawable="@color/dim_orange_btn_pressed" /> <item android:drawable="@android:color/white" /> </selector> 

agrega tu EditText esta línea android:background="@drawable/selector"

  <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/txt_pass" android:theme="@style/MyEditTextTheme" android:layout_width="match_parent" android:background="@drawable/selector" android:layout_height="wrap_content" android:inputType="textPassword" android:hint="E-Mail Address"/> <ImageButton android:id="@+id/btn_eye" android:layout_width="fill_parent" android:layout_height="wrap_content" android:src="@drawable/eye" /> </LinearLayout> 

En su código:

 buttonEye.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN) { txt_pass.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); } else if (event.getAction() == MotionEvent.ACTION_UP) { txt_pass.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); } } }; 

Si su fondo de uso para edittext o texteditlayout entonces el toggle de la visibilidad de la contraseña se oculta debajo del fondo. Por lo tanto, eliminar el fondo o crear un estilo personalizado y hacerlo como un tema para edittext en el diseño xml.

  <style name="EditText_theme" parent=""> <item name="passwordToggleTintMode">src_over</item> </style> 

Si todavía se enfrenta a problemas o si no ha mantenido ningún fondo a continuación, cambiar el tema de la aplicación en sí, porque los colores principales se determinan allí.

Aquí hay otra solución que no funcionó. Esto que conseguí de los docs de Google sí mismo,

  <style name="EditText_theme" parent=""> <item name="passwordToggleTint">@color/white</item> </style> 
  • Android TextInputLayout cambia el estilo de EditText después de establecer el error en null
  • La vista de error de TextInputLayout no se quita al eliminar el mensaje de error
  • Deshabilitar / quitar texto de sugerencia de etiqueta flotante en TextInputLayout XML
  • Cómo cambiar la posición de etiqueta flotante de TextInputLayout en android
  • Cómo cambiar el color de la etiqueta de TextinputLayout y edittext subrayar android
  • EditText añadido no es un TextInputEditText. Por favor, cambie a usar esa clase en su lugar
  • TextInputLayout error después de ingresar el valor en edittext
  • Problema con la alineación mediante TextInputLayout y Spinner
  • Android: TextInputLayout esconde drawableRight de un niño EditText
  • Error al inflacionar la clase EditText al crear TextInputLayout en Android 4.4.2:
  • Sugerencia de float de AutoCompleteTextView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.