首页 > 解决方案 > Android setCompoundDrawablePadding 不起作用

问题描述

我的布局中有一个 TextInputEditText,我需要在其中添加一个可绘制端。可绘制端出现了,但我无法为其添加可绘制填充端。

以下是我尝试过的一段代码:

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

标签: androidandroid-edittextandroid-textinputlayoutandroid-textinputedittext

解决方案


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
    }
}

在应用程序类中:

public class MyApplication extends Application {

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

        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    }
}

推荐阅读