setBackGroundColor 重置视图的形状

Posted

技术标签:

【中文标题】setBackGroundColor 重置视图的形状【英文标题】:setBackGroundColor resets the shape of view 【发布时间】:2014-12-05 09:54:09 【问题描述】:

我想要圆形的TextViews,我通过定义一个可以正常工作的可绘制形状来做到这一点。

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    <solid android:color="@color/White"/>
</shape>

我想要这个TextView 的不同颜色,所以我在我的代码中这样做:

setBackgroundColor(getResources().getColor(R.color.Red));

但是它会将 TextView 的形状重置为矩形!

所以,问题总结为仅动态更改视图颜色的正确方法是什么?

【问题讨论】:

R.color.Red 是您的自定义 xml 吗? @MysticMagic:不,这是一个简单的颜色值 【参考方案1】:

它变成了一个矩形,因为你正在改变视图的背景,当然它是矩形的,你应该改变纯色,但我认为这不可能以编程方式完成

唯一的办法就是这样做:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval" >
    <solid android:color="@color/Red"/>
</shape>

和:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval" >
    <solid android:color="@color/green"/>
</shape>

然后:

setBackgroundResource(R.color.green);    

【讨论】:

我自己带了这个,但如果有很多颜色,您必须创建 20 个 xml 文件。这违反了 DRY 原则!【参考方案2】:

您可以通过以下方式以编程方式更改视图形状的背景:

GradientDrawable drawable = (GradientDrawable)textView.getBackground();
    drawable.setColor(getResources().getColor(android.R.color.darker_gray));

【讨论】:

【参考方案3】:

使用

setBackground(drawable);

代替

setBackgroundColor(getResources().getColor(R.color.Red));

【讨论】:

以上是关于setBackGroundColor 重置视图的形状的主要内容,如果未能解决你的问题,请参考以下文章

IOS UI外观

按钮 setBackgroundColor 无高亮效果

LinearLayout.setBackgroundColor(int)在Android中不起作用

SetBackGroundColor 在 CardView 中不起作用

滚动其他滚动视图时滚动视图重置

如何将“#ffff”字符串颜色作为参数提供给 setBackgroundColor()? [复制]