Как использовать тему Holo.Light, но с помощью ActionBar использовать Holo без ICS? - PullRequest
15 голосов
/ 09 января 2012

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

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

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

Ответы [ 3 ]

24 голосов
/ 09 января 2012

Создайте собственный стиль и установите для родительского стиля тему «holo light», но для 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 в качестве стиля, и во всех ваших действиях используется голографическая тема, но стиль панели действий - голографический.

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

<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.Извините, но я думаю, что нет легкого пути, согласно тому, что я вижу ...

5 голосов
/ 11 мая 2013

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

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

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

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

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

0 голосов
/ 13 марта 2017

Легко ... 100% работает

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

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