【问题标题】:setBackGroundColor resets the shape of viewsetBackGroundColor 重置视图的形状
【发布时间】: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:不,这是一个简单的颜色值

标签: android xml view shape


【解决方案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));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 2018-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多