Атрибуты ActionBarSherlock mirrod, когда использовать префикс android:?

При стилизации ActionBarSherlock мне было интересно, когда я должен использовать атрибут с префиксом, когда атрибут без префикса, а когда и то, и другое. Например:

<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>

Я нашел это объяснение на веб-сайте ActionBarSherlock:

Зеркальные атрибуты

Из-за ограничений в системе тем Android любые настройки темы должны быть объявлены в двух атрибутах. Обычные атрибуты с префиксом Android применяют тему к собственной панели действий, а атрибуты без префикса предназначены для пользовательской реализации. Поскольку оба тематических API совершенно одинаковы, вам нужно всего лишь дважды ссылаться на свои настройки, а не реализовывать их дважды.

Самый простой способ передать, что именно это влечет за собой, — это пример. Ниже приведена полная тема из упомянутого выше примера «Styled»:

<style name="Theme.Styled" parent="Theme.Sherlock.Light.DarkActionBar">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.Light.ActionBar.Solid.Inverse">
    <item name="background">@drawable/bg_striped</item>
    <item name="android:background">@drawable/bg_striped</item>

    <item name="backgroundSplit">@drawable/bg_striped_split</item>
    <item name="android:backgroundSplit">@drawable/bg_striped_split</item>
</style>

Я думал, что атрибуты без префикса должны использоваться только для атрибутов, которых не существовало до уровня API 11. Но почему в примере есть атрибут android:background, а также атрибут background? android:background существует с уровня API 1. Может ли кто-нибудь дать более подробную информацию об этих зеркальных атрибутах?


person Cesar V.    schedule 04.01.2013    source источник


Ответы (2)


Из того, что я понимаю из документации ActionBarSherlock, которую вы цитируете, атрибут с префиксом android (который вы должны были бы установить только при использовании «нормальной» панели ActionBar) используется, когда ActionBarSherlock использует собственную версию ActionBar (то есть, на устройствах под управлением Android 3+, где она доступна), а версия без префикса используется в более старых версиях, когда ActionBarSherlock фактически должен использовать собственную реализацию компонента ActionBar.

Короче говоря, атрибуты с префиксом Android используются собственными функциями Android, а версии без префикса используются пользовательскими компонентами.

В любом случае, похоже, что вам всегда нужно устанавливать как атрибут с префиксом, так и атрибут без префикса при оформлении объекта ActionBarSherlock.

person mbrenon    schedule 04.01.2013

Простое правило: везде, где вы наследуете от parent="Widget.Sherlock.etc", у вас должны быть двойные атрибуты.

Исключением являются прямые стили, такие как Text и Button, так как вы только передаете свой стиль этому TextView/Button напрямую, однако я всегда наследовал бы от родительского/текущего стиля, определенного в abs__styles.xml, таким образом, вы всегда будете получать правильный интервал и т.д..

person Chris.Jenkins    schedule 04.01.2013