在安卓中的TextView中,将drawableTop图片的颜色设置为指定颜色

8

我有一个带drawableTop的textView,但是图片是黑色的,我想把颜色改成白色。有没有一种方法可以在不创建单独的imageView和TextView的情况下实现这一点。

以下是参考xml。

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:gravity="center_horizontal|bottom"
    android:drawableTop="@drawable/ic_add_room"
    android:text="More"/>
2个回答

6

使用Tint android:drawableTint 更改颜色。 示例:

<?xml version="1.0" encoding="utf-8"?>
<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="48dp"
    android:drawableTint="#fff"
    android:layout_height="48dp"
    android:gravity="center_horizontal|bottom"
    android:drawableTop="@drawable/ic_add_room"
    android:text="More"/>

3
谢谢您的提问。我已经添加了android:drawableTint="@color/white",并且我的colors.xml文件中有<color name="white">#FFFFFFFF</color>。但是我发现图片仍然是黑色的。我还收到一个警告,即android:drawableTint仅适用于API级别23及以上。我的项目最低要求为15。我是否漏掉了什么? - RK1414
@RK1414 通常不会使用“tint”函数对黑色位图进行��色。原始的位图文件应为白色,然后可以使用“tint”函数对其进行着色。这是因为着色通常会将每个像素乘以您指定的颜色,而这对白色图像效果最佳。(从API 21开始,您可以更改着色模式以使其适用于其他图像。) - Daniel Johansson
2
android:drawableTint仅适用于API级别23及更高版本,您有没有想法如何在XML中对API级别<23的可绘制对象进行着色? - Amjad Omari

3

解决方案1 - 如果这是xml文件,则进入drawable文件夹中的ic_add_room.xml。

 <vector xmlns:android="http://schemas.android.com/apk/res/android"
            android:width="24dp"
            android:height="24dp"
            android:viewportWidth="24.0"
            android:viewportHeight="24.0">
        <path
            android:fillColor="#FF000000"
            android:pathData="M13,7h-2v4L7,11v2h4v4h2v-4h4v-2h-4L13,7zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8z"/>
    </vector>

将 fillColor 根据您的需要进行修改...

例子-

android:fillColor="#FFE25959"

解决方案2 - 动态改变颜色

Drawable drawable = getResources().getDrawable(R.drawable.circle);
drawable = DrawableCompat.wrap(drawable);
DrawableCompat.setTint(drawable, Color.GREEN);
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_IN);
textview.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);

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