web-dev-qa-db-ja.com

Android 5.0のポップアップメニューのスタイル

アプリを準備中ですAndroid 5.0、最新の互換性ライブラリを使用しています。これが私のスタイルです。

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/theme_accent</item>
        <item name="colorAccent">@color/theme_accent_secondary</item>
    </style>

    <style name="AppThemeDark" parent="Theme.AppCompat">
        <item name="colorPrimary">@color/theme_accent</item>
        <item name="colorAccent">@color/theme_accent_secondary</item>
    </style>
</resources>

(ActionBarの色はプログラムで設定されています。)

今、私はオーバーフロー/ポップアップメニューにホロ実装の場合のように暗い背景を持たせたいのですが、機能させることができません。これは次のようになります。 enter image description here

popupMenuStyleを設定しようとしましたが、うまくいきませんでした。

ポップアップメニューを暗くするにはどうすればよいですか?

13
animaonline

このスタイルを使用して私の問題を解決しました:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/theme_accent</item>
    <item name="colorAccent">@color/theme_accent_secondary</item>
    <item name="actionBarStyle">@style/AbStyle</item>
    <item name="actionModeBackground">@color/actionmode_bg</item>
</style>

<style name="AbStyle" parent="Widget.AppCompat.Toolbar">
    <item name="elevation">2dp</item>
    <item name="displayOptions">homeAsUp|showTitle</item>
    <!--showHome-->
</style>

<style name="AppThemeDark" parent="Theme.AppCompat">
    <item name="colorAccent">@color/theme_accent_secondary</item>
    <item name="actionBarStyle">@style/AbStyle</item>
</style>

親のactionBarStyleとしてWidget.AppCompat.Toolbarを使用する必要がありました

7
animaonline

ActionBarの使用を停止します。 ToolBarActionBarのように設定したい場合は、Android開発者ブログの このガイド に従ってください。

Dark Action Barで実際にユースケースについて言及し、次のコードを提供します。

<Android.support.v7.widget.Toolbar
    Android:layout_height=”wrap_content”
    Android:layout_width=”match_parent”
    Android:minHeight=”@dimen/triple_height_toolbar”
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
20
Derk-Jan

完全な答えではなく、私がこれまでに見つけたもの:

過去のバージョンでは、ドローアブルを指定する必要がありました(チェック https://github.com/StylingAndroid/StylingActionBar コードとチュートリアル)

どうやら、今それは色です。これを変更するには、次のテーマを指定する必要があります。

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

    <style name="AppTheme" parent="Android:Theme.Material.Light.DarkActionBar">
        <item name="Android:actionBarPopupTheme">@style/popupNew</item>
    </style>

    <style name="popupNew" parent="Android:ThemeOverlay.Material.Light">
        <item name="Android:colorBackground">@color/red</item>
    </style>

</resources>

アプリに適用されるテーマがこれだけの場合、これは正しく機能します。既存のテーマにAndroid:actionBarPopupThemeを追加しても機能しません。私はその理由を理解しようとしています。

10
Macarse

プロパティpopupThemeをツールバーに追加します。

<Android.support.v7.widget.Toolbar
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  xmlns:app="http://schemas.Android.com/apk/res-auto"
  Android:id="@+id/toolbar"
  Android:layout_width="match_parent"
  Android:layout_height="wrap_content"
  Android:background="@color/color_primary"
  app:theme="@style/Theme.AppCompat.Light"
  app:popupTheme="@style/Theme.AppCompat" />

または、ツールバーの新しいスタイルを定義します。

<style name="MyToolBarStyle" parent="Widget.AppCompat.Toolbar">
    <item name="Android:background">@color/green</item>
    <item name="popupTheme">@style/Theme.AppCompat.Light</item>
    <item name="theme">@style/Theme.AppCompat</item>
</style>
6
Lukas

この質問はXMLによるスタイル設定ですでに回答されていますが、この質問と同様のスタイル設定の質問の解決策を自分で解決する方法の説明をここに追加します。

まず、これはAppCompatを使用する場合のソリューションです。アプリのstyle.xmlに、actionBarPopupThemeをテーマに追加します。

<style name="Theme.MyTheme" parent="@style/Base.Theme.AppCompat.Light.DarkActionBar">
    ...other stuff here

    <item name="actionBarPopupTheme">@style/Theme.MyTheme.ActionBarPopupTheme</item>
</style>

<style name="Theme.MyTheme.ActionBarPopupTheme" parent="@style/ThemeOverlay.AppCompat.Light">
    <item name="Android:textColor">@Android:color/white</item>
    <item name="Android:background">@Android:color/black</item>
</style>

この解決策にたどり着くまでに行った手順は次のとおりです(Androidのドキュメントが貧弱であるため、多少の探偵の作業が必要です):

  • Android Studioでアプリのstyle.xmlを開きます
  • アプリのテーマが定義されている行で、画面のカーソルを親テーマに置き(@ style/Base.Theme.AppCompat.Light.DarkActionBarをクリックするなど)、F4キーを押します。これにより、appcompatライブラリ内のスタイルのソースコードが表示されます。
  • このスタイルの中で私はこの行を見ました:

    <item name = "actionBarPopupTheme"> @ style/ThemeOverlay.AppCompat.Light </ item>

    これは、ポップアップのテーマを変更できる場所のように見えました。貧弱なAndroid開発者向けドキュメントで「actionBarPopupTheme」を検索し、「アクションバーのウィジェットによって表示されるポップアップをインフレートするために使用する必要があるテーマへの参照」を見つけました。 。

  • 「actionBarPopupTheme」を含むappcompat行をstyle.xmlにコピーし、この行でアイテムのテーマ参照(上の太字のビット)をTheme.MyTheme.ActionBarPopupThemeに置き換えました。

  • 私のstyle.xmlで、Theme.MyTheme.ActionBarPopupThemeという名前の新しいスタイルを作成しました。 appcompatソースからコピーしたスタイルで使用されているのと同じ親を使用しました(上の太字のビット)。
  • 新しいポップアップスタイルが機能することを確認するために、親スタイルをThemeOverlay.AppCompat.Darkに変更し、デバイスでコードを実行してテストしました。ポップアップスタイルが変更されたため、actionBarPopupThemeのオーバーライドが正しいことであることがわかりました。次に、ThemeOverlay.AppCompat.Lightに戻しました。
  • 次の課題は、Theme.MyTheme.ActionBarPopupThemeでオーバーライドするアイテム名を決定することです。文字色と背景色を変更しました。何かのスタイルを変更する正しいアイテム名を見つけるのは、場合によっては難しいことがあります。あまり目立たないスタイルアイテム名を見つける1つの方法は、appcompat xmlファイル(上記の2番目の手順でF4を押したときに開いたファイル)のスタイル定義を調べ、何かが見つかるまで親スタイル(F4に戻ります)に継続的に行くことです。それはあなたが望むことをするかもしれません。ここでもGoogle検索が役立ちます。
1
pbm