Skip to content

发现一个关于TextView背景的bug #1

@y-zx

Description

@y-zx

android:background="@color/colorAccent"
android:id="@+id/testview"

TextView 在xml文件里面设置了背景颜色(一个粉色),

broccoli.addPlaceholders(this, R.id.testview);
broccoli.show();
Activity里面设置背景,此时TextView背景色变成了框架内默认的 #dddddd。

但在调用broccoli.removeAllPlaceholders()后,TextView的背景颜色还是 默认的#dddddd。

查看源码发现,
placeholderPreStateSaver.setRestoredBackgroundDrawable(textView.getBackground());
存储的是textView原Drawable对象,
随后调用
if (parameter.getColor() != 0){
view.setBackgroundColor(parameter.getColor());
return;
}

@RemotableViewMethod
public void setBackgroundColor(@ColorInt int color) {
if (mBackground instanceof ColorDrawable) {
((ColorDrawable) mBackground.mutate()).setColor(color);
computeOpaqueFlags();
mBackgroundResource = 0;
} else {
setBackground(new ColorDrawable(color));
}
}
发现把颜色设置给了textView原Drawable对象,导致被存储的原Drawable颜色被改变,
所以broccoli.removeAllPlaceholders()恢复的颜色是默认的#dddddd,

使用如下方式生成一个新Drawable对象,则不会对原Drawable对象造成影响,
broccoli.addPlaceholder(new PlaceholderParameter.Builder()
.setView(findViewById(R.id.testview))
.setDrawable(new ColorDrawable(Color.parseColor("#dddddd")))
.build());

可能还有其他地方也会有同样问题(直接储存原对象,设置原对象),希望作者在README声明一下,或者更新解决下这个问题。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions