setBackGroundColor 重置视图的形状
Posted
技术标签:
【中文标题】setBackGroundColor 重置视图的形状【英文标题】:setBackGroundColor resets the shape of view 【发布时间】:2014-12-05 09:54:09 【问题描述】:我想要圆形的TextView
s,我通过定义一个可以正常工作的可绘制形状来做到这一点。
<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 重置视图的形状的主要内容,如果未能解决你的问题,请参考以下文章
LinearLayout.setBackgroundColor(int)在Android中不起作用