Как изменить фоновый цвет всплывающего меню Android

Я генерирую каждую опцию меню из базы данных запросов. Вот мой код.

final PopupMenu popupMenu = new PopupMenu(getBaseContext(), v); 
SQLiteDatabase db = AdapterDb.getReadableDatabase(); 
Cursor cursor = db.rawQuery(sql, null);
int ctritem = 0;
if (cursor.moveToFirst()) {
    popupMenu.getMenu().add(Menu.NONE, ctritem, Menu.NONE, "ALL ITEMS"); 
    do {
        ctritem++;   
        popupMenu.getMenu().add(Menu.NONE, ctritem, Menu.NONE, cursor.getString(0)); 
    } while (cursor.moveToNext());
}

Все в порядке, но проблема заключается в том, как изменить цвет меню опций или цвет фона всплывающего меню (от черного до белого), возможно ли это? Благодаря

Ответы

Ответ 1

Добавить стиль popupMenu в ur AppTheme:

<style name="AppTheme" parent="android:Theme.Light">
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>

<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
    <item name="android:popupBackground">@android:color/white</item>
</style>

manifest.xml:

 <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
.............
</application>

Ответ 2

Если вы используете AppCompact-v7, тогда вы можете создать PopupMenu, как показано ниже:

 <style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="popupMenuStyle">@style/popupMenuStyle</item>
</style>

<style name="popupMenuStyle" parent="Widget.AppCompat.PopupMenu">
    <item name="android:popupBackground">@android:color/white</item>
</style>

ПРИМЕЧАНИЕ. PopMenu всегда работает с контекстом активности, а не с контекстом приложения.

Ответ 3

если вы используете тему AppCompat, используйте

<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu">
    <item name="android:popupBackground">@android:color/black</item>

</style>

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="popupMenuStyle">@style/PopupMenu</item>
</style>

иначе

<style name="AppTheme" parent="android:Theme.Light">
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>

<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
    <item name="android:popupBackground">@android:color/white</item>

</style>

Ответ 4

сначала определите свой стиль для фона всплывающего меню в файле styles.xml в моем случае я использую это...

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>
<style name="PopupMenu" parent="@android:style/Widget.PopupMenu">
    <item name="android:popupBackground">@android:color/holo_green_light</item>
</style>

здесь я хочу изменить фон всплывающего меню в конкретном действии, поэтому примените тему (android: theme = "@style/AppTheme" ) с объявлением активности и она, безусловно, работает.  еще одна важная вещь для создания всплывающего меню с помощью этого кода PopupMenu popup = new PopupMenu (ваша активность, viewObj);

Ответ 5

В макете, где вы указываете панель инструментов, укажите тему по приложению: popupTheme = "@style/MyPopupMenu"

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:minHeight="?attr/actionBarSize"
    android:background="#2196F3"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    style="@style/DrawerArrowStyle"
    app:popupTheme="@style/MyPopupMenu">

</android.support.v7.widget.Toolbar>

Ответ 6

Пожалуйста, добавьте следующие строки в файле стиля xml, я надеюсь, что это поможет для приложения для создания материалов. Style.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>

    <!-- To change the popup menu and app text color  -->
    <item name="android:textColor">@color/colorPrimary</item>

    <!-- To change the background of options menu-->
    <item name="android:itemBackground">@color/skyBlue</item>
</style>

Подробнее см. ссылку http://www.viralandroid.com/2016/01/how-to-change-background-and-text-color-of-android-actionbar-option-menu.html

Ответ 7

Подробнее см. Как создать PopupMenu?. Я столкнулся с одной и той же проблемой, обыскал много, но нашел решение в упомянутой ссылке.

PopupMenu создается следующим образом:

PopupMenu popup = new PopupMenu(context, view);

PopupMenu берет стиль контекста, который передается, Передавая активность, поскольку контекст решил мою проблему.

Ответ 8

    <item name="android:actionBarPopupTheme">@style/popupNew</item>
</style>

<style name="popupNew" parent="android:ThemeOverlay.Material.Light">
    <item name="android:colorBackground">#ffffff</item>
</style>

Ответ 9

    **In  Style**
    **Your Application Theme**
     <style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
         <!-- Customize your theme here. -->
     <item name="android:itemBackground">@color/list_background</item>
     <item name="android:itemTextAppearance">@style/MyActionBar.MenuTextStyle</item>
        </style>

    **For Text Appearence**
     <style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
            <item name="background">@color/list_item_title</item>
            <item name="titleTextStyle">@style/MyActionBarTitle</item>
        </style>
        <style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
            <item name="android:textColor">@color/list_item_title</item>
        </style>

        <style name="MyActionBar.MenuTextStyle"
            parent="style/TextAppearance.AppCompat.Widget.ActionBar.Title">
            <item name="android:textColor">@color/list_item_title</item>
            <item name="android:textStyle">normal</item>
            <item name="android:textSize">16sp</item>
            <item name="android:gravity">center</item>
        </style>

**And Use App Theme In Menifest like:**

 <application
        android:name="Your Package"
        android:allowBackup="true"
        android:icon="@drawable/launcher_icon"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

Ответ 10

Добавьте тему PopupMenu в свой AppTheme:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="popupTheme">@style/PopupMenuTheme</item>
</style>

<style name="PopupMenuTheme" parent="Theme.AppCompat.Light">
    <item name="android:background">@android:color/white</item>
</style>

manifest.xml:

<application
    ...
    android:theme="@style/AppTheme">
    ...
</application>

Ответ 11

Вы можете использовать пользовательский макет, как это.

PopupMenu pop = new PopupMenu(MainActivity.this, v);
pop.getMenuInflater().inflate(R.menu.main, pop.getMenu());
pop.show();

Дизайн макета, как вы хотите. Надеюсь, это поможет.