如果我使用passwordToggleEnabled(EditText),我的drawableLeft会消失。

3
我正在尝试让我的应用程序中的EditText更美观,并且我想使用DrawableLeft在每个输入框中添加简单的图标。一切都很好,但是在"Password" EditText上,我添加了passwordToggleEnabled(如果用户点击眼睛,可以看到输入内容)。添加这个会导致我的drawableLeft消失。
你有什么想法吗?(对不起,我的英语很差 :-/)
这是带有drawable left的截图Capture with drawable left 这是带有密码眼睛的截图Capture with password eye 这是我的TextInputLayout:
<android.support.design.widget.TextInputLayout
    android:id="@+id/textInputPassword"
    android:layout_width="300dp"
    android:layout_height="60dp"
    android:layout_marginTop="16dp"
    android:theme="@style/EditTextHint"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textInputEmail">

    <EditText
        android:id="@+id/editTextPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:backgroundTint="@color/shapy_blue"
        android:drawablePadding="10dp"
        android:drawableStart="@mipmap/picto_password_blue"
        android:ems="10"
        android:hint="@string/enter_password"
        android:inputType="textPassword"
        android:textColor="@color/shapy_blue"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.478"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.459" />

</android.support.design.widget.TextInputLayout>

编辑 >> 当我在Java中更改可绘制对象的颜色(在焦点监听器上)

@Override
public void onFocusChange(View view, boolean b) {
    if(view == editTextEmail){
        editTextEmail.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.picto_mail_white,0,0,0);
        editTextEmail.setTextColor(getResources().getColor(R.color.white));
    } else {
        editTextEmail.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.picto_mail_blue,0,0,0);
        editTextEmail.setTextColor(getResources().getColor(R.color.shapy_blue));
    }
    if(view == editTextPasswordLogin){
        editTextPasswordLogin.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.picto_password_white,0,0,0);
        editTextPasswordLogin.setTextColor(getResources().getColor(R.color.white));
    } else {
        editTextPasswordLogin.setCompoundDrawablesWithIntrinsicBounds(R.mipmap.picto_password_blue,0,0,0);
        editTextPasswordLogin.setTextColor(getResources().getColor(R.color.shapy_blue));
    }

}

app:passwordToggleEnabled="true"添加到您的TextInputLayout中。 - Jyoti JK
如果API级别>=17,启用了RTL并选择了具有RTL流的特殊语言,则drawableLeft和drawableStart不相同。另请参见https://dev59.com/umYr5IYBdhLWcg3wKHEp 如果您仔细查看,您的图标并没有消失,而是在右侧 - 因此这种差异可能是问题所在。 - r-hold
我想在左边拥有图标和可绘制的图标(锁),在右边拥有切换密码可见性的眼睛图标。我已经尝试将“start”更改为“left”。 - Rikco
3个回答

10

使用

android:drawableStart="@drawable/ic_password" 

在带有drawableLeft的EditText中

这是我的示例代码

                    <android.support.design.widget.TextInputLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    app:passwordToggleDrawable="@drawable/show_password_selector"
                    app:passwordToggleEnabled="true"
                    android:orientation="vertical">
                    <android.support.v7.widget.AppCompatEditText
                        android:layout_width="180dp"
                        android:layout_height="wrap_content"
                        android:inputType="textPassword"
                        android:drawableLeft="@drawable/ic_password"
                        android:drawableStart="@drawable/ic_password"
                        android:hint="Password"/>
                </android.support.design.widget.TextInputLayout>

1

app:passwordToggleDrawable - 用作密码输入可见性切换图标的Drawable。 我认为由于其自身的drawable属性,它已经消失了。请设置这个drawable并检查。


动态设置左侧可绘制属性并检查。 - Qandil Tariq
我已经这样做了,因为当我点击edittext时,它的颜色会改变,我设置了正确颜色的可绘制对象。调试器进入了正确的函数,但什么也没有被设置。 - Rikco
在主帖上完成 - Rikco

0
如果你仍然遇到这个问题,对我来说解决的方法是在inputlayout中添加这些行代码。
app:endIconMode="password_toggle"
app:errorIconDrawable="@null"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接