当前位置: 首页 > 知识库问答 >
问题:

以编程方式设置android形状颜色

慕阳
2023-03-14

我正在编辑以使问题更简单,希望这有助于获得准确的答案。

假设我有以下椭圆形形状:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
    <solid android:angle="270"
           android:color="#FFFF0000"/>
    <stroke android:width="3dp"
            android:color="#FFAA0055"/>
</shape>

如何从一个活动类中以编程方式设置颜色?

共有3个答案

锺离穆冉
2023-03-14

这样做:

    ImageView imgIcon = findViewById(R.id.imgIcon);
    GradientDrawable backgroundGradient = (GradientDrawable)imgIcon.getBackground();
    backgroundGradient.setColor(getResources().getColor(R.color.yellow));
狄英哲
2023-03-14

现在更简单的解决方案是使用您的形状作为背景,然后通过以下方式以编程方式更改其颜色:

view.background.setColorFilter(Color.parseColor("#343434"), PorterDuff.Mode.SRC_ATOP)

见PorterDuff。可用选项的模式。

更新(API 29):

上述方法自 API 29 起已弃用,取而代之的是:

view.background.colorFilter = BlendModeColorFilter(Color.parseColor("#343434"), BlendMode.SRC_ATOP)

有关可用选项,请参见BlendMode。

山寒
2023-03-14

注意:答案已更新,以涵盖背景可着色的实例的场景。感谢泰勒·普法夫指出这一点。

drawable是一个椭圆形,是ImageView的背景

使用< code>getBackground()从< code>imageView获取< code>Drawable:

Drawable background = imageView.getBackground();

检查通常的嫌疑人:

if (background instanceof ShapeDrawable) {
    // cast to 'ShapeDrawable'
    ShapeDrawable shapeDrawable = (ShapeDrawable) background;
    shapeDrawable.getPaint().setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof GradientDrawable) {
    // cast to 'GradientDrawable'
    GradientDrawable gradientDrawable = (GradientDrawable) background;
    gradientDrawable.setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof ColorDrawable) {
    // alpha value may need to be set again after this call
    ColorDrawable colorDrawable = (ColorDrawable) background;
    colorDrawable.setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
}

紧凑型版本:

Drawable background = imageView.getBackground();
if (background instanceof ShapeDrawable) {
    ((ShapeDrawable)background).getPaint().setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof GradientDrawable) {
    ((GradientDrawable)background).setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
} else if (background instanceof ColorDrawable) {
    ((ColorDrawable)background).setColor(ContextCompat.getColor(mContext,R.color.colorToSet));
}

请注意,不需要null检查。

但是,如果在其他地方使用可绘制对象,则应在可绘制对象上使用 mutate(),然后再对其进行修改。(默认情况下,从 XML 加载的可绘制对象共享相同的状态。

 类似资料:
  • 问题内容: 有没有一种方法可以通过编程设置属性?似乎没有方法。 明确地说,我不是在谈论视图/窗口小部件样式!我在谈论以下内容: 问题答案: setTypeface是属性textStyle。 正如 Shankar V 添加的那样,要保留以前设置的字体属性,可以使用:

  • 如何以编程方式设置属性?

  • 问题内容: 我遇到以下问题:我实现了一个在一个案例中包含和的。在这种情况下,图像约为屏幕宽度的50%。所以我想居中。不幸的是,我发现居中的唯一方式是,使用上。 这是我的xml: 但是我需要以编程方式进行设置。有人知道我该如何实现这一目标或以其他方式知道吗?我在Google上找到的所有内容都不适用于此帖子。 谢谢! 问题答案: 做这样的事情: 更新: 另一种方法:

  • 我在Android中以编程方式设置APN。当我运行代码时,我得到。如果我在清单中提到这个权限,我得到的错误就像这些权限只有SYSTEM APPS。你能帮我解决这个问题吗?参考链接

  • 如何以编程方式创建此形状? 我尝试过这个简单的函数,它可以获取角点、颜色并将其设置为形状: 但我有个错误: 类型LinearLayout的方法getDrawable()未定义

  • 我已经开发了一个有圆角的应用程序小部件。我基本上设置了一个背景绘图到应用程序小部件布局的根。 你知道做这件事的方法吗?谢谢