it-swarm.com.de

Wie verwende ich das Holo.Light-Theme, aber verwende die ActionBar Hulu ohne ICS?

Ich hätte gerne eine dunkle ActionBar, aber der Rest der Anwendung verwendet das Holo.Light-Design. Ich weiß, dass es in ICS/4.0 ein Theme.Holo.Light.DarkActionBar-Theme gibt, aber ich möchte, dass dies auch in Honeycomb/3.0 + funktioniert.

Im Moment verwende ich das dunkle Holo-Thema und für den Rest meiner Komponenten verwende ich einen ContextThemeWrapper. Das ist aber viel Arbeit und kann leicht zu Fehlern führen.

Ist das möglich?

15
Thomas

Erstellen Sie einen benutzerdefinierten Stil und setzen Sie den übergeordneten Stil auf das Holo-Thema, die ActionBar auf normales Holo.

eine XML-Datei mit so etwas sollte den Job erledigen (einfach aus meinem Gedächtnis):

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

Legen Sie dann das appstyle0 in Ihrer AndroidManifest.xml als Stil fest und in allen Ihren Aktivitäten sind Holo-Light-Themen, aber der Aktionsleisten-Stil ist Holo-Dark.

Edit: Ich habe überprüft, warum meine erste Antwort nicht funktioniert.

<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>

Die Aktionsleiste ist in styles.xml mit Attributen definiert, die vom Hauptthema im Allgemeinen festgelegt werden. Zunächst ist der BG transparent, daher sollten Sie "Widget.Holo.Light.ActionBar.Solid" als verwenden parent. Dann müssen Sie die verschiedenen Elemente nacheinander auf das dunkle Thema setzen. Nehmen wir titleTextStyle als Beispiel:

<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>

Setze das jetzt als.

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

Gehen Sie folgendermaßen vor, wenn Sie die obigen XML-Attribute verwenden. 

Um alle zugehörigen Attribute zu finden, suchen Sie in styles.xml und themes.xml nach den Parametern. Tut mir leid, aber ich denke, es gibt keinen einfachen Weg, was ich sehe ...

24
KarlKarlsom

Ich hatte ein ähnliches Problem, als ich eine benutzerdefinierte Ansicht in die Aktionsleiste setzen wollte. Ich wollte eine dunkle Aktionsleiste, während der Rest der App hell blieb. Genauer gesagt hatte ich Spinner in der Aktionsleiste.

Zuerst sollte sich dein Thema erweitern 

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

Als Nächstes verwenden Sie in Ihrer Aktivität getActionBar().getThemedContext() als Kontext zum Aufblasen Ihrer Ansichten. In meinem Fall habe ich es an meine Adapter für Spinner-Arrays weitergegeben. 

Hat perfekt für mich gearbeitet.

5
kristesla

Fand es leicht ... 100% funktioniert

fügen Sie die folgende Zeile in Assemblyinfo.cs ein.

[Assembly: Application(Theme = "@Android:style/Theme.Material.Light.DarkActionBar")]
0
Rajat