首页 > 解决方案 > android:drawableLeft 在 api 级别 < 21 中不起作用

问题描述

我正在尝试使用该属性将图标加载到 EditTextdrawableLeft但不起作用。这在我的 xml 布局中:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:background="#fff"
    >

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        android:drawableLeft="@drawable/ic_google"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.462"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.212" />

</androidx.constraintlayout.widget.ConstraintLayout>

正如我们所看到的,我正在尝试放置一个名为ic_googleusingandroid:drawableLeft="@drawable/ic_google"

在此处输入图像描述

这是 ic_google xml:

<vector android:height="24.485847dp" android:viewportHeight="544.3"
    android:viewportWidth="533.5" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#4285F4" android:pathData="M533.5,278.4c0,-18.5 -1.5,-37.1 -4.7,-55.3H272.1v104.8h147c-6.1,33.8 -25.7,63.7 -54.4,82.7v68h87.7C503.9,431.2 533.5,361.2 533.5,278.4z"/>
    <path android:fillColor="#34A853" android:pathData="M272.1,544.3c73.4,0 135.3,-24.1 180.4,-65.7l-87.7,-68c-24.4,16.6 -55.9,26 -92.6,26c-71,0 -131.2,-47.9 -152.8,-112.3H28.9v70.1C75.1,486.3 169.2,544.3 272.1,544.3z"/>
    <path android:fillColor="#FBBC04" android:pathData="M119.3,324.3c-11.4,-33.8 -11.4,-70.4 0,-104.2V150H28.9c-38.6,76.9 -38.6,167.5 0,244.4L119.3,324.3z"/>
    <path android:fillColor="#EA4335" android:pathData="M272.1,107.7c38.8,-0.6 76.3,14 104.4,40.8l0,0l77.7,-77.7C405,24.6 339.7,-0.8 272.1,0C169.2,0 75.1,58 28.9,150l90.4,70.1C140.8,155.6 201.1,107.7 272.1,107.7z"/>
</vector>

我发现在我的活动中添加此代码可以工作AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);
    }
}

但不起作用,我也在 gradle 中添加了, vectorDrawables.useSupportLibrary = true但这是支持向量所必需的。我使用 android api level > 21 测试了应用程序,并且工作正常我使用 Api 23 但使用 android 4.2 Api 17 不起作用。
提前致谢。

标签: androidandroid-studioandroid-layout

解决方案


如果您想在 API 21 之前支持矢量可绘制对象,则必须使用app:drawableLeftCompat该属性。只有该属性才能进入加载矢量可绘制对象所需的正确代码路径。


推荐阅读