使用android可绘制形状的有效且结构化的方法是啥?

Posted

技术标签:

【中文标题】使用android可绘制形状的有效且结构化的方法是啥?【英文标题】:What is the efficient & structured way to use android drawable shape?使用android可绘制形状的有效且结构化的方法是什么? 【发布时间】:2017-01-18 20:37:26 【问题描述】:

我需要在我的项目中使用不同设计的几个按钮。所以我使用可绘制的形状来制作自定义按钮。

假设我需要一个圆角和绿色背景的按钮。所以我创建了一个形状“gree_round_button.xml”,效果很好。但话又说回来,我需要另一个具有相同样式的按钮,只是背景颜色会有所不同,为此我是否必须创建另一个 xml 文件,如“colorName_round_button.xml”?

为了便于理解,我保持简单,但不同按钮可能有许多共同样式,可能只有一两个属性不同。有什么方法可以跳过为同一设计创建多个文件?有什么方法可以用来扩展任何形状,并且可以将颜色、背景颜色作为参数传递? 可能就像这个“button.xml”,这个形状将接受一个颜色参数,我可以将这个形状用于我想要使用的每个按钮,只需将不同的颜色作为参数传递。

在 Web Css 中:我可以做这样的事情

.button border: 1px solid #ddd;border-radius:5px;padding:20px;
.button.green background:green;

有没有简单的方法来做这样的事情。 谢谢。

【问题讨论】:

你可以extend View 并传递你想要的任何颜色参数。 我一定会检查的。谢谢 【参考方案1】:

您应该看看 backgroundTint 这将允许您使用相同的可绘制对象,但使用不同的颜色覆盖它。

例如,您可以有一个 bg_c​​ircle.xml,它是一个白色圆圈。然后使用 tint 更改它的颜色,并将您的单独图标作为 src。

<ImageButton
    android:layout_
    android:layout_
    android:src="@drawable/ic_check_mark"
    android:background="@drawable/bg_circle"
    android:backgroundTint="@color/red"
    />

这样,您只需要一个round_button.xml,您可以将其用作所有按钮的背景,并根据需要使用不同的颜色对其进行着色。然后每个图标的内容都可以成为自己的可绘制对象。

下面的四个按钮只有 3 个可绘制对象:

<ImageButton
    android:layout_
    android:layout_
    android:src="@drawable/ic_feather"
    android:background="@android:drawable/btn_default"
    />

<ImageButton
    android:layout_
    android:layout_
    android:src="@drawable/ic_feather"
    android:background="@android:drawable/btn_default"
    android:backgroundTint="@color/colorPrimaryDark"
    />

<ImageButton
    android:layout_
    android:layout_
    android:src="@drawable/ic_plane"
    android:background="@android:drawable/btn_default"
    android:backgroundTint="@color/colorPrimaryDark"
    />
<ImageButton
    android:layout_
    android:layout_
    android:src="@drawable/ic_plane"
    android:background="@android:drawable/btn_default"
    android:backgroundTint="@color/colorAccent"
    />

【讨论】:

非常感谢您的精彩解释。刚刚将其标记为正确答案:)

以上是关于使用android可绘制形状的有效且结构化的方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用xml中的可绘制形状绘制半椭圆形(Android)

如何在 Android 中使用 XML 作为可绘制对象创建自定义形状?

如何用一些指针边缘绘制椭圆

如何在android中改变可绘制形状的颜色

防止形状可绘制笔划的部分重叠

Android L 忽略形状作为可绘制背景