Наследование обязательных атрибутов XML из пользовательской темы - PullRequest
3 голосов
/ 09 сентября 2011

Проблема:

У меня есть несколько TextViews, которые имеют большое количество идентичных атрибутов. Я хотел бы применить следующий стиль ко всем TextViews.

<!-- 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>

Есть еще одна тема по этому вопросу здесь , но я решил задать новый вопрос вместо того, чтобы восстанавливать старый.

Подведем итог:

Я знаю, что я мог бы легко сделать эту работу, просто добавив атрибуты layout_width и layout_height, или , явно добавив style = "@ style / fieldLabel" к каждому TextView. Но суть этого вопроса заключается в том, чтобы улучшить мои (и, надеюсь, другие) соглашения о кодировании, а также сделать сам код более читабельным и многократно используемым.

Я на самом деле очень удивлен, что никто раньше не сталкивался с этой проблемой, и что это не более стандартный способ форматирования.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 09 сентября 2011

Это проблема:

Причина: java.lang.RuntimeException: строка двоичного XML-файла # 20: Вы должен предоставить атрибут layout_width.

Ваш идентификатор TextView name_label, требуется атрибут android:layout_height и android:layout_width.

...