在 Android 上使用 drawable 加载形状

Loading a shape using drawable on Android

我正在尝试以编程方式使用 drawable 加载形状,以使背景颜色更时尚。

基本上,使用 XML 文件加载形状很简单:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
    android:startColor="#ffffff"
    android:centerColor="#00ffff"
    android:endColor="#000000"
    android:type="linear"
    android:angle="90"/>

但是,我正在尝试从服务器 下载此 XML 文件,因为它必须随季节变化。 (比如spring是粉色,夏天是蓝色,秋天是橙色)

下载位于 /data/data/package/resources/shape.xml 的 XML 文件后,我尝试使用 GradientDrawable 加载此背景颜色集,因为它完全是关于渐变的。

有很多关于创建新渐变的操作指南,但没有关于应用预加载渐变的指南。

我试过这个:

 view.setBackground(GradientDrawable.createFromPath("/data/data/package/resources/shape.xml"));

此处,视图是 activity 文件,如 RelativeLayout 或其他任何东西

但是,结果是默认背景颜色,即蓝色。

现在我将可绘制对象更改为:

view.setBackground(ShapeDrawable.createFromPath("/data/data/package/resources/shape.xml"));

我将可绘制选项更改为 ShapeDrawable,因为 XML 包含 Shape

结果是一样的,没有任何改变。更改为普通可绘制对象并不能帮助解决问题。

是否有其他方法可以将 XML 文件从外部存储 应用到可绘制对象?不然我写的是申请的方法但是有一些错误?

只需使用 findViewById 获取您的布局视图并设置其背景。 确保将 xml 存储在可绘制文件夹中。

对于约束布局

ConstraintLayout constraintLayout=findViewById(R.id.clay);
constraintLayout.setBackground(getDrawable(R.drawable.prac_shape));

prac_shape是形状元素的id。

编辑:通过java动态构建渐变:

GradientDrawable gradient = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, new int[]  {getResources().getColor(R.color.colorAccent),getResources().getColor(R.color.colorPrimaryDark)});
gradient.setShape(GradientDrawable.RECTANGLE);
constraintLayout.setBackground(gradient);

您可以随意设置它。您只需要解析您的请求并将适当的参数传递给构造函数和方法。