2016-08-30 2 views
6

enter image description hereИзменение цвета селектора маски пароля

Как вы можете видеть на картинке у меня есть андроид приложение с черным фоном и белым текстом. Однако там есть на самом деле «Показать текст» значок, который выглядит как «глаз» и черный, а также :(. Есть способ изменить цвет этого?

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> 

ответ

11

Ok ребята я нашел правильный ответ, есть ли способ настроить его цвет. https://developer.android.com/reference/android/support/design/widget/TextInputLayout.html#attr_android.support.design:passwordToggleTint

setPasswordVisibilityToggleTintList(ColorStateList) 

Обновление: Вы можете напрямую добавить следующий атрибут в TextInputLayout:

app:passwordToggleTint="#FFF" 
+0

Awesomely awesome –

0

Добавить вытяжке файл 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> 

добавить EditText THI s линия 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> 

В коде:

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 спасибо за полезный отредактированный и быстрый ответ! :), я пробовал это редактирование, но он сказал, что мне нужно имя для каждого элемента, имеет ли значение, что имена элементов? Всего нуб здесь жаль. Если бы вы были так любезны объяснить больше. – rapid3642

+0

Благодарим вас за то, что вы были более понятны в своем редактировании, однако я сделал это, но он сделал все поле белым, цель, которую я пытаюсь достичь, - сделать только «глаз» или «индикатор маски пароля» белым. Есть ли способ сделать это? Мне жаль, если я раньше не был ясен. – rapid3642

+0

Я мог бы демонстративно ошибаться, но я не думаю, что добавление слушателя и установка его для показа или скрытия приведет к изменению цвета, которое я пытаюсь достичь, im noob, поэтому, возможно, это неправильно, но если я объясню, объясните, чтобы я мог понять больше :) – rapid3642

4

rapid3642 «s ответ в правильном направлении, но я по-прежнему необходимо, чтобы выяснить, что именно будет работать.

Выполните следующие шаги, чтобы изменить цвет вашего переключения Drawable:

  1. Создать selector_password_visibility_toggle в ~/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. Добавить passwordToggleTintMode и passwordToggleTint к вашему TextInputLayout, как показано ниже:

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

Теперь ваш TextInputLayout изменит свой цвет.

+0

Спасибо, что добавили то, что сработало для вас! Надеюсь, это поможет другим! :) – rapid3642

0

Если ваш фоновый рисунок для edittext или texteditlayout, то переключатель видимости пароля скрыт под фоном. Поэтому удалите фон или создайте собственный стиль и создайте его как тему для edittext в макете xml.

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

Если вы по-прежнему сталкиваются вопрос или если вы не сохранили какой-либо фон, то изменить тему самого, потому что основные цвета определяются там приложения.

Вот и обходное решение, которое не работает. Это я получил из самих документов google,

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

Добавьте в свой макет следующее xmlns: приложение.

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

Теперь установите passwordToggleEnabled&passwordToggleTint в EditText соответственно

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

0

Вот хороший способ сделать это программно:

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

Вызовите этот метод в объекте TextInputLayout.

Смежные вопросы