Skip to content

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

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声明一下,或者更新解决下这个问题。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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