2011-01-31 2 views
15

У меня есть TextView, и я хочу применить стиль, который я использую для всех элементов TextView, а также еще один стиль, который я использую только для определенного действия. Есть ли возможность сделать это?Как применить два разных стиля к одному элементу в android?

ответ

13

Стиль под Android может иметь родительский стиль.

Таким образом, только MyActivityTextView определите GeneralTextView как родительский стиль и измените/добавьте свойства стиля.

Тогда вы можете использовать MyActivityTextView для некоторых видов и GeneralTextView для остальных.

Это описано в Defining Styles.

+0

О, я вижу. Это здорово, спасибо. Еще один вопрос: может ли стиль child также перезаписывать родительские свойства? – Bruiser

+1

Да, он может переопределять родительские свойства. –

4

Вы можете продлить один стиль с другим в вашем style.xml:

<style name="current_weekday_white" parent="current_day_white"> 
    <item name="android:textColor">#FFABAB</item> 
</style> 
+0

эй, я пробовал это с текстовым видом, но работает только первый стиль, а не расширенный. любые подсказки? –

19

Просто маленький кусочек информации, которая может добавить к общей стоимости вопроса - бессовестно скопированный с: http://developer.android.com/guide/topics/ui/themes.html#DefiningStyles

Если вы хотите наследовать от стилей, которые вы определили сами, вам не нужно использовать родительский атрибут. Вместо этого просто прикрепите имя стиля, который вы хотите наследовать, к имени вашего нового стиля, разделенного периодом. Например, чтобы создать новый стиль, который наследует стиль CodeFont, определенный выше, но сделать красный цвет, можно создавать новый стиль, как это:

<style name="CodeFont.Red"> 
     <item name="android:textColor">#FF0000</item> 
    </style> 

Обратите внимание, что нет родительского атрибута в теге, но потому что атрибут name начинается с имени стиля CodeFont (который является стилем, который вы создали), этот стиль наследует все свойства стиля из этого стиля. Этот стиль затем переопределяет свойство android: textColor, чтобы текст был красным. Вы можете ссылаться на этот новый стиль как @ style/CodeFont.Red.

Вы можете продолжать наследовать так много раз, сколько хотите, цепочки имен с периодами. Например, вы можете расширить CodeFont.Red, чтобы быть больше, с:

<style name="CodeFont.Red.Big"> 
    <item name="android:textSize">30sp</item> 
</style> 
+4

Мне интересно, что, хотя я ранее посещал и изучал/снимал эту страницу, я не знал этого интересного и полезного лакомого кусочка. Спасибо @Bruiser. – DavidDraughn

Смежные вопросы