Android - используйте атрибуты для настройки пользовательских стилей - PullRequest
1 голос
/ 02 марта 2012

вот моя проблема. Я определил пользовательские темы и стили, чтобы настроить различные представления в соответствующих файлах .xml. Вот некоторые выдержки из кода:

themes.xml:

...
<style name="Legacy" parent="android:Theme.NoTitleBar">
    <item name="android:buttonStyle">@style/Legacy.Button</item>
    ...
</style>

styles.xml:

...
<style name="Legacy.Button" parent="@android:style/Widget.Button">
    <item name="android:textColor">#ffffff</item>
    <item name="android:background">@drawable/button_selector_blue</item>
    <item name="android:textSize">15dp</item>
</style>

Допустим, я установил тему моего приложения в Legacy. Если я использую кнопку в макете, она получит мои собственные параметры по умолчанию (белый текст, фон @ drawable / button_selector_blue и т. Д.).

Теперь давайте предположим, что я хочу сохранить эти параметры для размера текста: я хотел бы иметь несколько кнопок с большим размером текста, которые будут определены в атрибуте titleSize в attrs.xml:

...
<attr name="titleSize" format="reference|dimension" />

и какое значение установлено для каждой темы в моем файле themes.xml.

Так что мой макет будет содержать что-то вроде:

<Button 
    android:id="@+idmyButtonId"
    android:drawableRight="@drawable/aDrawable" 
    android:text="@string/someText"
    android:textSize="?titleSize"
    android:layout_width="fill_parent" android:layout_height="wrap_content">
</Button>

При запуске моего приложения я получаю следующую ошибку: java.lang.UnsupportedOperationException: не удается преобразовать в измерение: type = 0x2

Так что, похоже, я не могу настроить пользовательские стили, используя атрибуты - по крайней мере, не так. Это возможно? Если нет, что бы вы использовали для достижения такого результата?

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

Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 03 марта 2012

Я наконец получил его на работу. Вместо того, чтобы определять размер моих заголовков в attrs.xml, я использовал Dimens.xml. Так что теперь следующие работы:

<Button 
  android:id="@+idmyButtonId"
  android:drawableRight="@drawable/aDrawable" 
  android:text="@string/someText"
  android:textSize="@dimen/titleSize"
  android:layout_width="fill_parent" android:layout_height="wrap_content">
</Button>

В то время как я получаю свой обычный размер текста (который я определил в моем файле styles.xml) на кнопке, используя это:

<Button 
    android:id="@+id/idRegularButton"
    android:text="@string/regularSizeText"
    android:layout_width="wrap_content" android:layout_height="wrap_content">
</Button>
...