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

Posted

技术标签:

【中文标题】定义渐变/形状/角的 XML 父样式【英文标题】:Defining XML Parent Style of Gradient / Shape / Corners 【发布时间】:2011-11-29 14:54:18 【问题描述】:

如何在 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: 
            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>

然后drawable看起来像:

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

那没用。我尝试类似地将上述内容放在它自己的 XML 文件中,然后对每个可绘制对象执行此操作:

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

那也没用。

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

不幸的是,我认为这是不可能的。我尝试做同样的事情,但找不到解决方案。

我建议将所有值放入资源 xml 文件中。在我的例子中,我选择将尺寸放在 dimens.xml 和 integers.xml 中,并将颜色放在 colours.xml 中(尽管它们可以合并到一个文件中)

虽然我最终为每种颜色创建了一个形状可绘制文件,但至少如果我想调整颜色或填充等,我只需要编辑 colours.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

希望这会有所帮助。

【讨论】:

以上是关于定义渐变/形状/角的 XML 父样式的主要内容,如果未能解决你的问题,请参考以下文章

SVG基本形状及样式设置

自定义弧形卡片形状 Flutter

Android中的嵌套形状

使用 OpenCV 进行三角形检测

带有渐变的Android形状边框

怎么在android上面做出根据形状来渐变的效果