我最近将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))
答案 0 :(得分:5)
我遇到了完全相同的问题,我所做的就是添加<pkg>_OVERRIDE_SRCDIR
和drawableStart
,并按预期显示。
答案 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欢呼