【问题标题】:Can't change background color of the View if color defined in the XML如果在 XML 中定义颜色,则无法更改视图的背景颜色
【发布时间】:2019-04-21 06:41:47
【问题描述】:

我遇到了奇怪的问题。我有一个 RelativeLayout,我通过以下方式在 XML 中定义背景颜色:

 <RelativeLayout ..
      android:background="#449966">
 </RelativeLayout>

现在我想以编程方式更新背景颜色,所以我这样做了:

 view.setBackgroundColor( Color.argb( 255, 200, 150, 133 ) );

只有当我从 XML 文件中删除 background 属性时,这才奇怪地起作用。如果存在 background 属性,则在以编程方式设置时背景颜色不会改变。

所以由于 background 属性似乎期望 Drawable,我想也许我也需要创建一个可绘制对象并改用 setBackground 方法,所以我做了:

 Drawable newColor = new ColorDrawable( Color.argb( 255, 200, 150, 133 ) );
 view.setBackground( newColor );

但如果 background 属性存在于 XML 中,背景颜色仍然不会改变。似乎如果 background 属性是在 XML 中定义的,它就不能被“覆盖”。

有什么建议吗?谢谢!

【问题讨论】:

  • 我真正能想到的唯一会导致所描述行为的事情是,您以某种方式结束了重叠的Views,并且您的代码正在将背景设置在另一个后面。 RelativeLayout 默认情况下是透明的,所以如果是这种情况,那么当您在布局中指定颜色时,将背景设置在一个“背面”上似乎不起作用,但当您不指定颜色时它会起作用。无论如何,我们需要更多信息来确定问题所在。
  • 我检查了你的问题,但它对我有用。你能分享一下你的 Activity 和它的布局吗?

标签: java android xml colors


【解决方案1】:

这是因为每个视图的行为都与其他视图不同,并且当您尝试更改作为“布局”视图的一般视图颜色时,它将永远无法正常工作,因此您应该通过 id 调用“RelativeLayout”,然后更改其视图:

 <RelativeLayout
  android:id="@+id/myview"
  android:background="#449966">
 </RelativeLayout>

在java中:

 view.findViewById(R.id.myview).setBackgroundColor(Color.argb( 255, 200, 150, 133 ));

【讨论】:

    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2019-01-15
    • 1970-01-01
    • 2018-06-11
    • 2020-03-02
    相关资源
    最近更新 更多