android - 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_google
usingandroid: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 不起作用。
提前致谢。
解决方案
如果您想在 API 21 之前支持矢量可绘制对象,则必须使用app:drawableLeftCompat
该属性。只有该属性才能进入加载矢量可绘制对象所需的正确代码路径。
推荐阅读
- mongodb - MongoDB多对多查找
- javascript - Node.js Express - 为什么 next("route") 不会导致下一条路线?
- c# - 如何使用 Blazor 创建表单向导?
- java - 如何测试中断异常
- discord.js - Is there a way to have multi prefixes?
- javascript - 使用淘汰赛 js 网站教程 - 如何大写 fullName(而不仅仅是 lastName)?
- node.js - Google sheet 'function returned undefined, expected promise or value'
- activemq - invalid uri: stomp://0.0.0.0:61613 [invalid broker(s): 'NoneType' object has no attribute 'groupdict']
- mobile - Bootstrap Responsive Menu Not Expanding Correctly
- .net-core - 是否可以强制 Linux 上的 .Net Core 使用 CRLF?