无法在TextInputLayout中的EditText中使用drawable

时间:2016-11-01 13:31:21

标签: android android-edittext android-design-library android-textinputlayout

我最近将Android设计库从24.2.1升级到25.0.0。 在此之后" drawableX" EditText中的功能不起作用。

编辑01.11: 我了解到如果你使用android:drawableStart而不是android:drawableLeft,在xml中设置drawable是有效的。但是以编程方式设置drawable不起作用。我使用它来制作一个" Clear" -button来清空EditText。但是这个功能现在已经破了。如果这是故意来自谷歌或一个错误,我将不胜感激任何解决方法或知识!

我之前可以使用的可清除编辑文本的代码,但现在还没有:

assert sorted(exampleOutput) == sorted(func(inputList))

5 个答案:

答案 0 :(得分:5)

我遇到了完全相同的问题,我所做的就是添加<pkg>_OVERRIDE_SRCDIRdrawableStart,并按预期显示。

答案 1 :(得分:1)

基于Ahmed Ashraf G的回答,我找到了解决方案。 更改以下代码:

setCompoundDrawables(getCompoundDrawables()[0],
        getCompoundDrawables()[1], icon, getCompoundDrawables()[3]);

为:

setCompoundDrawablesRelative(getCompoundDrawablesRelative()[0],
            getCompoundDrawablesRelative()[1], icon, getCompoundDrawablesRelative()[3]);

从StackOverflow上的其他地方(文档中没有提到这一点)xxxCompoundDrawablesXxx和xxxCompundDrawablesRelativeXxx之间的区别在于相对版本考虑了RTL语言,即它们与使用drawableStart而不是drawableLeft相同。

总而言之,Google已经打破了TextInputLayout中EditText不是RTL方法的所有方法。由于新方法是在API级别17中添加的,因此我将其视为主要错误,可能会在将来的更新中修复

答案 2 :(得分:1)

将endIconMode添加到“自定义”中,以为textinputlayout添加可绘制的结尾。

<com.google.android.material.textfield.TextInputLayout
   app:endIconMode="custom"
   app:endIconDrawable="@drawable/ic_tick_grey"
   ....
</com.google.android.material.textfield.TextInputLayout>

答案 3 :(得分:0)

尝试用android.support.design.widget.TextInputEditText替换EditText,例如:

 <android.support.design.widget.TextInputLayout
     android:id="@+id/email_input"
     android:layout_width="match_parent"
     android:layout_height="wrap_content">

 <android.support.design.widget.TextInputEditText
          android:id="@+id/email"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:hint="@string/email_hint"
          android:drawableStart="@drawable/ic_clear" />
 </android.support.design.widget.TextInputLayout>

答案 4 :(得分:0)

这是我找到的最简单的方法:

第1步。

在布局上,设置您的 endIconDrawable 。重要的是要知道,如果您未设置 endIconMode ,它将不会显示 em> 。

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/custom_end_icon"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/hint_text"
    app:endIconMode="custom"
    app:endIconDrawable="@drawable/custom_icon"
    app:endIconContentDescription="@string/custom_content_desc">

  <com.google.android.material.textfield.TextInputEditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

</com.google.android.material.textfield.TextInputLayout>

第2步。根据您要使用按钮的方式,可以使用以下三种方法

TextInputLayout textInputCustomEndIcon = view.findViewById(R.id.custom_end_icon);

// If the icon should work as button, set an OnClickListener to it.
textInputCustomEndIcon
    .setEndIconOnClickListener(/* custom OnClickListener */);

// If any specific changes should be done when the EditText is attached (and
// thus when the end icon is added to it), set an OnEditTextAttachedListener
textInputCustomEndIcon
    .addOnEditTextAttachedListener(/* custom OnEditTextAttachedListener */);

// If any specific changes should be done if/when the endIconMode gets changed,
// set an OnEndIconChangedListener
textInputCustomEndIcon
    .addOnEndIconChangedListener(/* custom OnEndIconChangedListener */);

有关自定义和其他功能的更多信息,请对此Link欢呼