2016-08-30 2 views
6

enter image description hereChanger la couleur du sélecteur de mot de passe masque

Comme vous pouvez le voir dans l'image que j'ai une application android avec un fond noir et texte blanc. Cependant, il est en fait une icône « Afficher le texte » qui ressemble à un « œil » et il est noir aussi bien :(. Est-il possible de changer la couleur de ce?

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> 

Répondre

0

Ajouter un fichier drawable 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> 

ajoutez votre EditText thi s ligne 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> 

Dans votre code:

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); 
     } 
    } 
}; 
+0

wow je vous remercie pour l'édition utile et une réponse rapide! :), j'ai essayé cette édition, mais il a dit que j'avais besoin d'un nom pour chaque élément, est-ce que cela a de l'importance? Noob total ici désolé. Si vous voulez bien m'expliquer davantage. – rapid3642

+0

Merci d'être plus clair avec votre montage, mais je l'ai fait mais cela rend tout le champ blanc, le but que j'essaie d'atteindre est de faire juste "l'oeil" ou "l'indicateur de masque de mot de passe" blanc. Y a-t-il un moyen de faire cela? Je suis désolé si je n'étais pas clair avant. – rapid3642

+0

Je pourrais me tromper mais je ne pense pas que l'ajout d'un auditeur et le réglage pour montrer ou cacher va accomplir le changement de couleur que j'essaie d'atteindre, im un noob alors peut-être mal ici mais si je suis :) – rapid3642

4

réponse de rapid3642 pointé dans la bonne direction, mais je encore besoin de savoir exactement ce qui fonctionne.

Suivez ces étapes pour changer la couleur de votre bascule drawable:

  1. Créer selector_password_visibility_toggle dans ~/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. Ajouter passwordToggleTintMode et passwordToggleTint à votre TextInputLayout, comme ci-dessous:

    <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"> 
    

Votre couleur TextInputLayout aura désormais sa couleur modifiable.

+0

Merci d'avoir ajouté ce qui a fonctionné pour vous! J'espère que cela aide les autres! :) – rapid3642

0

Si vous utilisez l'arrière-plan pour edittext ou texteditlayout, la visibilité par mot de passe est masquée en arrière-plan. Supprimez donc l'arrière-plan ou créez un style personnalisé et créez-le en tant que thème pour edittext dans la mise en page XML.

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

Si vous toujours face à problème ou si vous avez gardé aucun arrière-plan, puis changer le thème de l'application elle-même parce que les principales couleurs y sont déterminées.

Voici une autre solution de contournement qui n'a pas fonctionné. Ce que j'ai obtenu de google docs lui-même,

<style name="EditText_theme" parent=""> 
     <item name="passwordToggleTint">@color/white</item> 
    </style> 
3

Ajoutez l'application xmlns suivante dans votre mise en page.

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

Réglez maintenant passwordToggleEnabled&passwordToggleTint en conséquence EditText

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

0

Voici une bonne façon de le faire programatically:

setPasswordVisibilityToggleTintList(AppCompatResources.getColorStateList(context, R.color.white)); 

Appelez cette méthode sur l'objet TextInputLayout.