web-dev-qa-db-ja.com

マスクパスワードセレクターの色を変更する

enter image description here

写真でわかるように、私はAndroidアプリに黒い背景と白いテキストを使用しています。しかし、実際には「目」のように見える「テキストを表示」アイコンがあり、黒も:(。これの色を変える方法はありますか?

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>
15
rapid3642

OK、私は正しい答えを見つけました、ISそれの色をカスタマイズする方法です。 https://developer.Android.com/reference/Android/support/design/ widget/TextInputLayout.html#attr_Android.support.design:passwordToggleTint

setPasswordVisibilityToggleTintList(ColorStateList)

更新:次の属性をTextInputLayoutに直接追加できます。

app:passwordToggleTint="#FFF"
28
rapid3642

rapid3642 の答えは正しい方向を指していますが、正確に何が機能するかを調べる必要がありました。

次の手順に従って、トグルドローアブルの色を変更します。

  1. 作成selector_password_visibility_toggle in ~/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. 以下のように、passwordToggleTintModepasswordToggleTintTextInputLayoutに追加します。

    <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の描画可能な色が変更されます。

8
Sufian

次のxmlns:appをレイアウトに追加します。

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

次にpasswordToggleEnabledを設定しますそれに応じてEditTextでpasswordToggleTint

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

プログラムでこれを行うには、次の方法が適しています。

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

TextInputLayoutオブジェクトでこのメソッドを呼び出します。

4
Bart Burg

Edittextまたはtexteditlayoutに背景を使用している場合、パスワードの表示切り替えは背景の下に表示されません。そのため、背景を削除するか、カスタムスタイルを作成して、xmlレイアウトのedittextのテーマにします。

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

それでも問題が解決しない場合、または背景を保持していない場合は、アプリ自体のテーマを変更します。メインの色がそこで決定されるためです。

これは私にとってうまくいかなかった他の回避策です。これは、GoogleのAndroid docs自体から取得したものです。

 <style name="EditText_theme" parent="">
        <item name="passwordToggleTint">@color/white</item>
    </style>
1
Nihal
Create a custom Style.

<style name="PasswordText" parent="TextAppearance.AppCompat">
    <item name="Android:textColor">@color/dt_login_text</item>
    <item name="Android:textColorPrimary">@color/dt_login_text</item>
</style>

XML Code. // This will change the password mask color.

<Android.support.v7.widget.AppCompatEditText
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:padding="@dimen/padding_6"
            Android:theme="@style/PasswordText"
            Android:layout_margin="@dimen/margin_3"
            Android:gravity="center"
            Android:inputType="textPassword"
            Android:text="Q"/>
1
Manoj DB

ドローアブルファイルを追加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を追加します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
Ahmad Aghazadeh