在运行时更改形状边框颜色

Posted

技术标签:

【中文标题】在运行时更改形状边框颜色【英文标题】:Change shape border color at runtime 【发布时间】:2012-11-15 03:33:57 【问题描述】:

我的可绘制文件夹中有这个形状:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="5dp" />
    <solid android:color="#ffffff" />
    <stroke android: android:color="#B5B5B5"/>
</shape>

这定义了一个圆角矩形,我可以将它作为背景应用到任何面板,如下所示:android:background="@drawable/round_corner_shape"

问题来了:我的应用程序上的面板很少,与背景的形状相同,但对于每个形状,我想要不同的边框(笔触)颜色。我不想创建 3 个形状,唯一的区别是笔触颜色。 是否可以在运行时更改笔画值?

【问题讨论】:

这是值得思考的问题,好问题。 +1 【参考方案1】:

我遇到了同样的问题。 就我而言,我有一个 GridView,网格中的项目可以在运行时由用户更改边框颜色。

因此,在该网格的 gridviewAdapter 中,我在 getView 方法(为适配器生成视图的方法)中执行了以下操作

public View getView(int position, View convertView, ViewGroup parent) 
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    convertView = inflater.inflate(R.layout.griditem, null);
    GradientDrawable gradientDrawable = (GradientDrawable) convertView.getBackground(); 

    gradientDrawable.setStroke(2, mColor); 
    convertView.invalidate();
    return convertView;

mColor 是一个表示颜色的 int,就像我们在 xml 文件中所做的那样。 在 java 代码中,我们使用“0x”而不是“#”来以 AARRGGBB 格式定义它。 例如,使用 0xFF000000 表示 100% 不透明的黑色,使用 0xFF0000FF 表示 100% 不透明的蓝色。 在这里解释这一点,因为谷歌 api '有帮助'告诉 int 颜色是“笔画的颜色”。

这解决了我的问题......我想你可以为你的情况尝试类似的东西。

【讨论】:

【参考方案2】:

您好,您可以尝试在运行时创建背景,然后您可以随时更改它。

RoundRectShape rect = new RoundRectShape(
  new float[] 30,30, 30,30, 30,30, 30,30,
  null,
  null);
ShapeDrawable bg = new ShapeDrawable(rect);
bg.getPaint().setColor(0x99FFFFFF);
view.setBackgroundDrawable(bg);

【讨论】:

但在您的示例中,我没有使用现有的 xml 代码。我想在 xml 中定义一个形状(角半径、背景、描边宽度)(或其他方式,但使用上面的所有参数),如果需要,只更改描边颜色。这就是问题所在,如果你能帮忙的话。 为我工作。但出于复制和粘贴目的,它应该是bg.getPaint().setColor(0x99FFFFFF); 为背景着色,而不是描边。

以上是关于在运行时更改形状边框颜色的主要内容,如果未能解决你的问题,请参考以下文章

在 WP8 上更改按钮边框颜色时出现延迟

在 iOS 13 中更改主题时边框颜色不会改变

在选择时更改 UITableViewCell 的边框颜色

如何更改 QTableView 边框颜色?

如何更改按钮的边框颜色并更改editText中下划线的颜色?

在 Swift 3 中突出显示(或点击)按钮时如何更改 UIButton 边框颜色?