定义渐变/形状/角落的XML父样式

9
如何在XML中定义易于重用的基本形状(或渐变或角落)?
我有大约十几个可重复使用的可绘制渐变,除了起始和结束颜色之外都是相同的。希望将相同的部分定义在其他地方,并为每种不同的渐变创建一个XML文件,仅定义起始和结束颜色。这可能吗?
这是基础内容:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <gradient xmlns:android="http://schemas.android.com/apk/res/android"
        android:type="linear" 
        android:angle="270" 
    android:startColor="#e1ffffff"
    android:endColor="#e100ff00">

    <stroke android:width="1dp" 
            android:color="#ff000000" />

    <corners android:radius="4dp" />
</gradient>
</shape>

我想要在每个可绘制的 XML 文件中覆盖 startColor 和 endColor(还有可能是圆角半径或其他属性)。

我尝试使用父级和样式,但它们都没有使用任何属性。例如:

<style name="base_gradient">
    <item name="android:angle">270</item>
    <item name="android:type">linear</item>
    <item name="android:startColor">#e1ffffff</item>
    <item name="android:endColor">#e100ff00</item>
</style>

然后可绘制对象看起来像:

<gradient style="@style/base_gradient" />

那行不通。我尝试将上述内容放入自己的XML文件中,然后对每个可绘制项都执行此操作:

<gradient parent="@drawable/base_gradient" />

那也行不通。

有没有办法做到这一点?

1个回答

7
很遗憾,我认为这是不可能的。我曾尝试过同样的事情,但没有找到解决方案。
我建议将所有值放入资源XML文件中。在我这里,我选择将我的尺寸放在dimens.xml和integers.xml中,将颜色放在colors.xml中(虽然它们可以合并到一个文件中)。
虽然我最终为每种颜色创建了一个形状可绘制文件,但至少如果我想微调颜色或填充等,我只需要编辑colors.xml文件、integers.xml文件或dimens.xml文件。
其中一个我的形状可绘制文件看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>

<shape
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle" >

  <corners 
      android:radius = "@dimen/radius_corner" />

  <!-- end colour at top, start colour at bottom -->
  <gradient
      android:angle="@integer/gradient_angle_default"
      android:endColor="@color/white" 
      android:startColor="@color/pink_pale"/>

  <padding
      android:left = "@dimen/my_padding"
      android:right = "@dimen/my_padding"
      android:bottom = "@dimen/my_padding"
      android:top = "@dimen/my_padding"  />

</shape>

资源文件链接: http://developer.android.com/guide/topics/resources/more-resources.html

希望这可以帮到你。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接