如何重用layouts / layout-attribues并在之后更改单个属性

时间:2015-08-06 07:02:06

标签: android android-layout

我有这个简单的按钮XML:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
    <shape  android:shape="rectangle">
        <solid android:color="@color/some_color" />
    </shape>
</item>

我这样使用它:

<Button
    android:textColor="#ffffff"
    android:background="@drawable/buttonxml"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="String"
    android:id="@+id/button"/>

问题是,通过这样做,我可以使用此按钮XML的唯一颜色是some_color。如果我想重用这个相同的布局,我需要创建另一个XML来改变颜色。有什么方法我可以重用按钮XML,只更改一些值?我想的是:

<Button
    android:textColor="#ffffff"
    android:background="@drawable/buttonxml"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="String"
    android:id="@+id/button"
    parent:color="@color/anotherColor"/>

1 个答案:

答案 0 :(得分:3)

您可以在styles.xml中创建自定义按钮样式以重复使用特定样式:

<style name="CustomButtonStyle" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/buttonxml</item>
    <item name="android:textColor">#ffffff</item>
</style>

您可以在布局中使用此样式:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="String"
    android:id="@+id/button"
    style="@style/CustomButtonStyle"  
    />

textColor为白色,backgroundbuttonxml

如果要覆盖单个属性,只需将其添加到yout布局中即可。它们将覆盖样式(主题样式和布局中的样式)

<Button
    android:id="@+id/button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="String"
    style="@style/CustomButtonStyle"  
    android:textColor="@color/anotherColor"


    />

此处textcolor将为anotherColor,但background仍为buttonxml

<强>替代

使用include重用整个布局。如果在include中添加属性,也可以覆盖属性。

<include android:id=”@+id/news_title”
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:textColor="@color/anotherColor"
     layout=”@layout/yourbuttonlayout”/>