23

不再相关! 此问题与旧 Android 4.x 版本中的错误有关。 android:tint现在应该可以正常工作,如下例所示

我正在尝试将色调应用于 < layer-list > 内的位图

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape  xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
            <solid android:color="@color/grey" />
            <size android:width="45dp" android:height="45dp"/>
        </shape>
    </item>
    <item android:left="5dp" android:right="5dp" android:top="5dp" android:bottom="5dp">
        <bitmap android:src="@drawable/ic_action" android:tint="#FF000000"   />
    </item>
</layer-list>

预览显示它应该可以工作,来自 ANDROID-STUDIO: 在此处输入图像描述

但是在设备上部署时它不会着色:在此处输入图像描述

如果我在我的布局中使用 ImageView,它会正确着色,但会因图层列表而失败。我相信我已经尝试了每一种 tintMode 都没有结果。

4

3 回答 3

14

对于可能遇到此问题的其他任何人。这就是我所做的。

设置

  • 安卓工作室 2.3.2

摇篮

  • minSdkVersion 15
  • targetSdkVersion 25
  • 编译'com.android.support:appcompat-v7:25.3.1'

图层 Drawable 我添加android:id=@+id/bitmapID到包含位图的项目中

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape android:shape="oval">
            <solid android:color="#9e9e9e" />
            <size android:width="45dp" android:height="45dp"/>
        </shape>
    </item>
    <item
        android:id="@+id/tintDrawableImg"
        android:left="5dp"
        android:right="5dp"
        android:top="5dp"
        android:bottom="5dp">
        <bitmap android:src="@mipmap/ic_pencil" android:tint="#860000"   />
    </item>
</layer-list>

活动布局 我将图层可绘制添加到 ImageView

<ImageView
    android:id="@+id/tintLayerTest"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:src="@drawable/test_layer"/>

MainActivity 在 onCreate() 方法中,我们可以使用 findViewByID 从可绘制图层中定位位图

public class MainActivity extends AppCompatActivity {

    ImageView iv;
    LayerDrawable ld;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Declare ImageView containing LayerDrawable
        iv = (ImageView)findViewById(R.id.tintLayerTest);
        //Get LayerDrawable from ImageView
        ld = (LayerDrawable)iv.getDrawable();
        //Get specific Drawable/Bitmap from within LayerDrawable
        //by ID and pass it as an independent Drawable
        Drawable ldDrawable = ld.findDrawableByLayerId(R.id.tintDrawableImg);
        
        //Pass your new Drawable to DrawableCompat.setTint
        //and define your color int
        DrawableCompat.setTint(ldDrawable, ContextCompat.getColor(this, R.color.colorAccent));

    }
}

我希望这可以帮助遇到这个问题的其他人。

于 2017-06-02T23:29:35.157 回答
0

使用位图标签尝试使用 xml drawable

保存以下文件 xml custom_image.xml 并替换您的图标和色调颜色

<?xml version="1.0" encoding="utf-8"?>
    <bitmap
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:src="@drawable/iv_veg"
      android:tint="@color/red">
 </bitmap>
于 2019-09-19T06:26:52.070 回答
-1

正如@lucidbrot 在评论中提到的那样,android:tint现在应该可以在没有任何黑客攻击的情况下工作。

于 2021-03-02T23:40:42.880 回答