Как использовать тему Holo.Light, но использовать ActionBar для использования Holo с ICS?

Я хотел бы иметь темный ActionBar, но остальное приложение использует тему Holo.Light. Я знаю, что тема Theme.Holo.Light.DarkActionBar в ICS/4.0, но я хочу, чтобы это также работало в Honeycomb/3.0 +.

В Момент я использую темную тему Голо, а для остальных моих компонентов я использую ContextThemeWrapper. Но это большая работа и может легко привести к ошибкам.

Возможно ли это?

Ответы

Ответ 1

Создайте собственный стиль и настройте стиль родителя на тему голой темы, а ActionBar - на обычный Holo.

xml файл с чем-то вроде этого должен выполнять задание (только из моей памяти):

<style name="appstyle0" parent="android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@android:style/Widget.Holo.ActionBar</item>
</style>

Затем установите appstyle0 в вашем стиле AndroidManifest.xml как стиль, и во всех ваших действиях будет голой светлой темой, но стиль панели действий будет холодным.

Edit: Я проверил, почему мой первый ответ не работает.

<style name="Widget.Holo.Light.ActionBar" parent="Widget.Holo.ActionBar">
    <item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title</item>
    <item name="android:subtitleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Subtitle</item>
    <item name="android:background">@android:drawable/ab_transparent_light_holo</item>
    <item name="android:backgroundStacked">@android:drawable/ab_stacked_transparent_light_holo</item>
    <item name="android:backgroundSplit">@android:drawable/ab_bottom_transparent_light_holo</item>
    <item name="android:homeAsUpIndicator">@android:drawable/ic_ab_back_holo_light</item>
    <item name="android:progressBarStyle">@android:style/Widget.Holo.Light.ProgressBar.Horizontal</item>
    <item name="android:indeterminateProgressStyle">@android:style/Widget.Holo.Light.ProgressBar</item>
</style>

Панель действий определена в styles.xml с атрибутами, которые задаются основной темой в целом. Прежде всего BG прозрачен, поэтому вы должны использовать "Widget.Holo.Light.ActionBar.Solid" как родительский. Затем вам нужно установить разные предметы по одному темной теме. Давайте возьмем titleTextStyle в качестве примера:

<style name="TextAppearance.Holo.Widget.ActionBar.Title.Own"
       parent="TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">@android:color/primary_text_holo_dark</item>
    <item name="android:textColorHighlight">@android:color/highlighted_text_holo_dark</item>
    <item name="android:textColorHint">@android:color/hint_foreground_holo_dark</item>
    <item name="android:textColorLink">@android:color/holo_blue_light</item>
</style>

Установите это сейчас как.

<item name="android:titleTextStyle">@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Own</item>

Следуйте приведенным выше атрибутам xml.

Чтобы найти все связанные атрибуты, найдите в styles.xml и themes.xml параметры. Извините, что сказал, но я думаю, что нет простого способа, согласно тому, что я вижу...

Ответ 2

У меня возникла аналогичная проблема, когда я хотел поместить пользовательское представление в панель действий. Мне нужен темный бар, в то время как остальная часть приложения оставалась легкой. Более конкретно, у меня были прядильщики в панели действий.

Сначала ваша тема должна расширяться

<style name="MyTheme.Light" parent="android:Theme.Holo.Light.DarkActionBar">

Далее, из вашей активности используйте getActionBar().getThemedContext() в качестве контекста для раздувания ваших просмотров. В моем случае это то, что я передал своим адаптерам матричных счетчиков.

Работала отлично для меня.

Ответ 3

Нашел это легко... 100% работает

добавьте следующую строку в Assemblyinfo.cs

[assembly: Application(Theme = "@android:style/Theme.Material.Light.DarkActionBar")]