从自定义主题继承所需的XML属性

时间:2011-09-08 22:50:03

标签: android xml android-layout android-widget

问题:

我有几个共享大量相同属性的TextView。我想将以下样式应用于所有TextView。

<!-- TextView -->
<style name="fieldLabel" parent="@android:style/Widget.TextView">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_weight">0.7</item>
    <item name="android:textSize">18sp</item>
</style>

但出于某种原因,当我将此样式应用为活动范围的主题时,我收到此错误:

09-08 15:57:17.034: ERROR/AndroidRuntime(5269): Caused by: java.lang.RuntimeException: Binary XML file line #38: You must supply a layout_width attribute.

当我尝试将此样式应用为主题时,这只是 。因为,当我添加

style="@style/fieldLabel"

单独对每个TextView的属性按预期工作,因此错误来自于尝试将此主题应用于整个活动。


守则:

styles.xml:

<style name="CustomActivityStyle" parent="android:Theme"> <!--This is theme I am trying to apply -->
    <item name="android:textViewStyle">@style/fieldLabel</item>
</style>

<!-- TextView -->
<style name="fieldLabel" parent="@android:style/Widget.TextView">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_weight">0.7</item>
    <item name="android:textSize">18sp</item>
</style>

myactivity.xml:

<!-- This is an example of one of the TextViews -->
<TextView
    android:id="@+id/name_label"
    android:text="@string/name_label"
/>

的AndroidManifest.xml:

<!-- Implementing the theme in the Manifest -->
<activity android:name=".MyActivity"
    android:configChanges="orientation"
    android:theme="@style/CustomActivityStyle"
    android:label="@string/my_title">
</activity>

此问题还有另一个主题here,但我决定提出一个新问题,而不是恢复旧问题。

总结:

我知道通过向每个TextView显式添加style =“@ style / fieldLabel”,只需添加layout_width和layout_height属性,我就可以轻松完成这项工作。但问题的关键在于改进我的(并希望是其他人)编码约定,以及使代码本身更具可读性和可重用性。

我真的很惊讶以前没有人遇到过这个问题,而且这不是一种标准的格式化方式。

感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

这是问题所在:

  

引起:java.lang.RuntimeException:二进制XML文件行#20:你   必须提供layout_width属性。

您的TextView ID name_label需要android:layout_heightandroid:layout_width属性。