web-dev-qa-db-ja.com

Holo.Lightテーマを使用して、ActionBarでICSなしでHoloを使用する方法は?

暗いActionBarが必要ですが、アプリケーションの残りの部分でHolo.Lightテーマを使用します。私はICS/4.0にTheme.Holo.Light.DarkActionBarテーマがあることを知っていますが、Honeycomb/3.0 +でもこれを機能させたいです。

現時点では、暗いHoloテーマを使用しており、残りのコンポーネントではContextThemeWrapperを使用しています。しかし、これは多くの作業であり、簡単にエラーにつながる可能性があります。

これは可能ですか?

15
Thomas

カスタムスタイルを作成し、親スタイルをホロライトテーマに、アクションバーを通常のホロに設定します。

このようなものを含むxmlファイルは、(私の記憶の外で)仕事をするはずです:

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

次に、AndroidManifest.xmlでappstyle0をスタイルとして設定します。すべてのアクティビティでホロライトテーマですが、アクションバーのスタイルはホロダークです。

編集:最初の回答が機能しない理由を確認しました。

<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」を使用する必要があります。次に、さまざまなアイテムを1つずつダークテーマに設定する必要があります。例として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でパラメーターを検索します。申し訳ありませんが、私が見るものによれば、簡単な方法はないと思います...

24
KarlKarlsom

アクションバーにカスタムビューを配置したいときに、同様の問題に遭遇しました。アプリの残りの部分は明るいままで、暗いアクションバーが欲しかった。より具体的には、アクションバーにスピナーがありました。

まず、テーマを拡張する必要があります

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

次に、アクティビティから、ビューを拡張するためのコンテキストとしてgetActionBar().getThemedContext()を使用します。私のインスタンスでは、これが私のスピナーアレイアダプターに渡したものです。

私には完璧に働きました。

5
kristesla

簡単だとわかった... 100%機能する

以下の行をAssemblyinfo.csに追加します

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