Не удается применить темы и стили в Android - PullRequest
0 голосов
/ 25 октября 2011

Я искал решение часами: как применить простую тему или стиль к приложению, деятельности или просто представлению?Это кажется очень простым, но мои стили всегда игнорируются.

Вот код в style.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="master" parent ="@android:style/Theme.NoTitleBar">
        <item name="android:typeface">serif</item>
        <item name="android:textColor">#8b8378</item>
    </style>
</resources>

, а вот код в AndroidManifest.xml:

<application android:icon="@drawable/icon" 
        android:label="@string/app_name"
        android:theme="@style/master">

и код в ListView

<ListView android:layout_height="wrap_content" 
style="@style/master"
android:id="@+id/list" 
android:layout_width="fill_parent">
</ListView>

НИЧЕГО не происходит .Стиль шрифта, цвет все остаются по умолчанию.Только при объявлении атрибутов явно, как

<TextView android:gravity="center" android:typeface="serif" android:textColor="#8b7d6b" android:textAppearance="?android:attr/textAppearanceSmall" android:id="@+id/text_intro" android:layout_height="wrap_content" android:text="@string/welcome_text" android:layout_width="wrap_content" android:padding="20sp" android:layout_weight="0"></TextView>

будет работать.Я знаю, что eclipse не поддерживает предварительный просмотр темы и стиля, но они не работают и на эмуляторе.

Помогите, пожалуйста!Я не могу поверить, что я застрял с этой крошечной проблемой в течение недели ... Заранее спасибо!

1 Ответ

1 голос
/ 25 октября 2011

Здесь есть несколько моментов, связанных со стилями и ресурсами Android.

Стили Android - это чрезвычайно общее средство, и в результате некоторые конфигурации возможны, но недопустимы и будут игнорироваться. Вы столкнулись с несколькими. :)

Применительно к представлению стиль будет эквивалентен установке тех же атрибутов в этом представлении. Стили не касаются дочерних представлений. typeface и textColor недопустимы в ListView, поэтому они игнорируются. Они также не будут работать над темой таким образом, поскольку темы предоставляют стили по умолчанию для различных видов представлений. (Почему недопустимые атрибуты игнорируются, а не генерируют ошибку? Поскольку новые атрибуты добавляются в более поздние версии платформы, старые устройства должны игнорировать дополнительные атрибуты, которые они не знают, как анализировать на совместимость.)

Лучший способ выполнить то, что вы пытаетесь сделать, это, вероятно,:

  • Создание стиля для TextViews. (У этого не должно быть родителя, который является темой, как ваш вставленный код.)
  • Примените этот стиль к TextView в макете элемента списка, используя синтаксис style=.
...