web-dev-qa-db-ja.com

ActionBarドロップダウンメニューのスタイル

DarkActionBarから継承するカスタムテーマを使用していて、ライトホロテーマを使用するときのようにドロップダウンメニューを白くカスタマイズする必要があります。

私は背景を白に変更することができました:

<style name="MyTheme" parent="@style/Theme.Light.DarkActionBar">
    <item name="Android:actionDropDownStyle">@style/MyDropDownNav</item>
</style>
<style name="MyDropDownNav">
    <item name="Android:background">@drawable/spinner_background_white</item>
    <item name="Android:popupBackground">@drawable/menu_dropdown_panel_whyite</item>
    <item name="Android:dropDownSelector">@drawable/selectable_background_white</item>
</style>

しかし、テキストの色を黒に変更する方法の手がかりはありません。白のドローアブルを設定した後の問題は、白の背景に白があるため、テキストが表示されないことです。

17
lujop

調査を終えて自分で答えます。質問のスタイル設定に加えて、次のことを行う必要があります。

  • actionBarWidgetTheme用にAndroid:spinnerDropDownItemStyleをカスタマイズして、テキストの外観を変更します。
  • また、ドロップダウンリストは、使用するアダプタによって管理されることを忘れないでください。標準の(simple_dropdown_item_1line)を使用した場合は問題ありません。しかし、私のようなカスタムアイコンを使用した場合(アイコンを追加できるようにするため)レイアウトを適用することを忘れないでくださいstyle="?attr/spinnerDropDownItemStyle"レイアウトTextView。

次に、最終的なカスタムスタイルは次のとおりです。

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

<style name="Theme.myapp" parent="@style/Theme.Light.DarkActionBar">
    <item name="Android:actionDropDownStyle">@style/myapp_DropDownNav</item>        
    <item name="Android:actionBarWidgetTheme">@style/myapp.actionBarWidgetTheme</item>
</style>

<style name="myapp.actionBarWidgetTheme" parent="@style/Theme.">
     <item name="Android:spinnerDropDownItemStyle">@style/myapp.Widget.DropDownItem.Spinner</item>
</style>

<style name="myapp_DropDownNav" parent="@style/Widget.Spinner.DropDown.ActionBar">
    <item name="background">@drawable/spinner_background_ab_myapp</item>
    <item name="Android:background">@drawable/spinner_background_ab_myapp</item>
    <item name="Android:popupBackground">@drawable/menu_dropdown_panel_myapp</item>
    <item name="Android:dropDownSelector">@drawable/selectable_background_myapp</item>
</style>

<style name="myapp.Widget.DropDownItem.Spinner" parent="Widget.DropDownItem.Spinner">
    <item name="Android:textAppearance">@style/myapp.TextAppearance.Widget.DropDownItem</item>
</style>

<style name="myapp.TextAppearance.Widget.DropDownItem" parent="TextAppearance.Widget.DropDownItem">
    <item name="Android:textColor">@color/black</item>
</style>

myapp_DropDownNavのドローアブルは白い背景のドローアブルです ActionBar Style generatorAndroid Asset Studio で生成できます

21
lujop

itemTextAppearance を設定してみてください。それはあなたが望むものを達成するはずです。

3
Jason Robinson

これを行う最も簡単な方法は何かを偶然見つけました。 AppCompatライブラリを使用していました。

<style name="ApplicationTheme" parent="@style/Theme.AppCompat">
    <item name="Android:actionBarWidgetTheme">@style/Theme.AppCompat.Light</item>
    <item name="actionBarWidgetTheme">@style/Theme.AppCompat.Light</item>
</style>
2
Georgie

私のアドバイスは、単にSherlock.Lightテーマから継承し、該当するフィールドをDark値に変更することです。私のアプリでは、白い「上」アイコンとアクションラベルの白いテキストが必要でした。アクションバーアイコンの暗いバージョンは提供していないので、とにかくすべて白です。それで、数時間それをいじくり回し、さまざまな人々の提案に従った後、ついに私はABSテーマファイルで探していたものを見つけました。

私はSherlock.Light(技術的にはHoloEverywhereLight.Sherlockですが...)を継承して変更します。

<item name="Android:actionMenuTextColor">@color/White</item>
<item name="actionMenuTextColor">@color/White</item>
<item name="Android:homeAsUpIndicator">@drawable/abs__ic_ab_back_holo_dark</item>
<item name="homeAsUpIndicator">@drawable/abs__ic_ab_back_holo_dark</item>
<item name="Android:dividerVertical">@drawable/abs__list_divider_holo_dark</item>
<item name="dividerVertical">@drawable/abs__list_divider_holo_dark</item>

それでおしまい。クラスを拡張したり、コードのスタイルを変更したりするよりも簡単で簡単です。

0
toadzky