什么是效率&使用android drawable形状的结构化方式?

时间:2017-01-18 20:37:26

标签: android xml android-background android-shape

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

假设我需要一个圆角和绿色背景的按钮。所以我创建了一个形状“gree_round_button.xml”,这很好用。但是我再次需要另一个具有相同风格的按钮,只是背景颜色会有所不同,为此我必须创建另一个像“colorName_round_button.xml”这样的xml文件吗?

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

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

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

有没有简单的方法可以做这样的事情。 感谢。

1 个答案:

答案 0 :(得分:2)

你应该看看backgroundTint这将允许你使用相同的drawable,但用不同的颜色覆盖它。

因此,例如,您可以拥有一个白色圆圈的bg_circle.xml。然后使用色调来改变它的颜色,并将你的单独图标作为src。

<ImageButton
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:src="@drawable/ic_check_mark"
    android:background="@drawable/bg_circle"
    android:backgroundTint="@color/red"
    />

这样您只需要一个round_button.xml,您可以将其用作所有按钮的背景,并根据需要使用不同的颜色着色。然后,每个图标的内容可以是它自己的drawable。

下面的四个按钮只有3个抽屉:

enter image description here

<ImageButton
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:src="@drawable/ic_feather"
    android:background="@android:drawable/btn_default"
    />

<ImageButton
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:src="@drawable/ic_feather"
    android:background="@android:drawable/btn_default"
    android:backgroundTint="@color/colorPrimaryDark"
    />

<ImageButton
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:src="@drawable/ic_plane"
    android:background="@android:drawable/btn_default"
    android:backgroundTint="@color/colorPrimaryDark"
    />
<ImageButton
    android:layout_width="75dp"
    android:layout_height="75dp"
    android:src="@drawable/ic_plane"
    android:background="@android:drawable/btn_default"
    android:backgroundTint="@color/colorAccent"
    />