代码修改Shape资源创建的Drawable的坑

一般为TextView设置个背景,比如圆角矩形,再加个什么颜色啊等等,可以在xml文件中定义一个Shape。也可以在java代码中实现,使用GradientDrawable类,这就是Shape对应的类。
记录一个坑,多个View使用了同一个shape,然后在某一个地方,用java代码修改了,会影响多个地方。
比如定义一个这样的shape

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/main_color_blue"/>
</shape>

在多个TextView用这个shape设置了背景,然后把某一个TextView背景修改了

GradientDrawable background = (GradientDrawable) view1.getBackground();
background.setColor(Color.RED);

其他的TextView也会受影响,但是不一定立马就表现出来
需要做一下处理

GradientDrawable background = (GradientDrawable) view1.getBackground();
background = (GradientDrawable) background.mutate();
background.setColor(Color.RED);

mutate()方法基本是复制了一个新的,也不用重新设置给view

    原文作者:43d60efa37c7
    原文地址: https://www.jianshu.com/p/bf831142ae64
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞