Android:用XML覆盖自己的XML视图

时间:2012-08-01 15:19:01

标签: android xml styles override

我正在寻找一种在android中覆盖我自己的XML视图的方法。 所以我只需要指定一次设置(如背景,边框,默认内容) - 然后再次使用它。

问题在于我无法找到任何相关信息。 (我发现的东西是关于使用XML中的java类来覆盖,这不是我想要的)

这是一些非工作代码,但我希望它能够很好地解释它:

main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <field android:text="@string/str1" />
    <field android:text="@string/str2" />
    <field android:text="@string/str3" />
    <field android:text="@string/str4" />
    <field android:text="@string/str5" />
</LinearLayout>

code representing field (field.xml):
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/field"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@layout/field_background"
    android:text="@string/default_string"/>

如您所见,字段本身曾经定义过,并且在一次定制时多次使用。 (另一个字符串作为文本集)

这根本不起作用,但我希望有人知道如何做出像这样的工作。 (没有编码,只有XML)

谢谢, 丹尼斯

3 个答案:

答案 0 :(得分:2)

我建议你设置一个风格。在styles.xml的某个文件(通常为res/values)中,为您的字段添加样式:

<style name="DefaultTextFieldStyle">
    <item name="android:id">@+id/field</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:background">@layout/field_background</item>
</style>

然后在main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">
    <TextView style="@style/DefaultTextFieldStyle"
        android:text="@string/str1" />
    <TextView style="@style/DefaultTextFieldStyle"
        android:text="@string/str2" />
    <TextView style="@style/DefaultTextFieldStyle"
        android:text="@string/str3" />
    <TextView style="@style/DefaultTextFieldStyle"
        android:text="@string/str4" />
    <TextView style="@style/DefaultTextFieldStyle"
        android:text="@string/str5" />
</LinearLayout>

我刚刚复制了你的值,但是对于布局中的多个视图具有相同的android:id值是错误的,将布局作为背景是很奇怪的。

答案 1 :(得分:0)

我不知道如何在没有代码的情况下做你想做的事情。我会定义自己的custom component。另请参阅Different formats for different Textview defined by Custom style,其中显示了如何设置TextViews的样式,这可能是您想要的。

答案 2 :(得分:0)

此处无需自定义组件。如果我理解你的问题,风格应该足以做你想要的。

只需在LinearLayout中定义一系列TextViews,让它们从您可以定义的样式here继承公共部分(layout_widthlayout_height等)。

根据需要,唯一不断变化的部分是android:text