我正在尝试以编程方式使用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文件,因为它必须季节性更改。 (例如,春天是粉红色,夏天是蓝色,秋天是橙色)
下载位于/data/data/package/resources/shape.xml中的XML文件后,我尝试使用GradientDrawable加载此背景colorset,因为它完全与渐变有关。
有许多关于创建新渐变的操作指南,但没有关于应用预加载渐变的信息。
我试过了:
view.setBackground(GradientDrawable.createFromPath("/data/data/package/resources/shape.xml"));
此处,视图是活动文件,例如RelativeLayout或其他任何内容
但是,结果是默认的背景颜色,即蓝色。
现在我将drawable改为:
view.setBackground(ShapeDrawable.createFromPath("/data/data/package/resources/shape.xml"));
我将drawable选项更改为ShapeDrawable,因为XML包含Shape
结果是一样的,没有任何改变。更改为正常drawable无助于解决问题。
还有另一种方法可以将 XML文件从外部存储应用到drawable吗?否则,我写的是应用的方法,但有一些错误?
答案 0 :(得分:0)
只需使用findViewById查看布局并设置其背景。 确保将xml存储在drawable文件夹中。
对于constraintLayout
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);
您可以随意使用它来根据需要进行设置。您只需要解析您的请求并将适当的参数传递给构造函数和方法。