安卓setCompoundDrawablePadding无效

4

我在布局中使用了TextInputEditText,需要添加一个drawable end。虽然drawable end出现了,但我无法为其添加drawable padding end。

以下是我尝试过的代码:

  editText.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(R.drawable.error), null);
  editText.setCompoundDrawablePadding(getResources().getDimensionPixelSize(R.dimen.image_padding));

1
你的代码看起来正确。你使用了什么类型的drawable?当你增加padding时,你期望看到什么?Drawable应该保持在相同的位置,只有文本可用空间会缩小。 - Maik
@maik 这是一张普通的错误图片。感叹号是标准的错误提示符号。 - Anju
2
请问您能否提供整个XML布局?TextInputEditText可能没有足够的水平扩展空间。您能否也调试一下getResources().getDimensionPixelSize(R.dimen.image_padding)返回的值是多少? - Egemen Hamutçu
你是否期望复合绘图填充可以将图标移开离编辑文本的边缘?或者你期望它增加图标和文本内容之间的间距? - Ben P.
不要忘记重要的一点:您正在将复合绘制应用于TextInputEditText。 这个视图通常会封装在一个TextInputLayout中。这意味着填充将不会应用于编辑文本上面的行。 这是我制作的一个测试应用的示例。 - André Sousa
显示剩余2条评论
1个回答

3

由于getResources().getDrawable已被弃用,最好使用ContextCompat.getDrawable()代替。 如果drawablePadding没有改变且不需要在程序中进行处理,则尝试在xml文件中设置它。

editText.setCompoundDrawablesWithIntrinsicBounds(
    null, 
    null, 
    ContextCompat.getDrawable(context, R.drawable.error), 
    null
);

在布局xml中:
<android.support.design.widget.TextInputEditText
    android:id="@+id/editText"
    ...
    android:drawablePadding="@dimen/image_padding"
/>

如果您正在使用Android向量绘图并希望具有低于21的API的向后兼容性,请添加以下片段。

在应用级别的build.gradle文件中:

android {
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
    }
}

在 Application 类中:
public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    }
}

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