如何更改背景颜色弹出菜单android

时间:2014-01-20 10:23:50

标签: android menu colors popup

我从查询数据库生成菜单的每个选项。 这是我的代码。

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());
}

一切都还可以,但问题是如何更改选项菜单的颜色或弹出菜单的背景颜色(从黑色到白色),是否可能? 感谢

12 个答案:

答案 0 :(得分:38)

将popupMenu样式添加到您的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>

答案 1 :(得分:9)

如果您正在使用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始终使用Activity Context,而不是Application context。

答案 2 :(得分:9)

请在样式xml文件中添加以下行,希望这对材料设计应用有所帮助。 的 Style.xml

session = driver.session()
session.run('CREATE CONSTRAINT ON (u:user) ASSERT u.user IS UNIQUE')
session.run('CREATE CONSTRAINT ON (h:hobby) ASSERT h.hobby IS UNIQUE')

session.close()

def writeBatch(b):
    print("writing batch of " + str(len(b)))
    session = driver.session()
    session.run('UNWIND {batch} AS elt '+
                'MERGE (u:user{user: elt.user})'+
                'MERGE (h:hobby{hobby:elt.hobby})'+
                'MERGE (u)-[r:hobby]->(h)'
                +'', {'batch': b})
    session.close()

writeBatch(b)

有关详细信息,请参阅此链接http://www.viralandroid.com/2016/01/how-to-change-background-and-text-color-of-android-actionbar-option-menu.html

答案 3 :(得分:5)

如果您使用的是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 :(得分:2)

首先在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 =&#34; @ style / AppTheme&#34;)和活动声明,它确实有效。  使用此代码创建弹出菜单的另一个重要事项PopupMenu popup = new PopupMenu(your activity,viewObj);

答案 5 :(得分:2)

在您提供工具栏的布局中,按app指定主题:popupTheme =&#34; @ style / MyPopupMenu&#34;

<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 :(得分:1)

风格 您的应用主题

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

用于文字显示

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

并使用应用主题,如:

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

答案 7 :(得分:0)

有关详细说明,请参阅How to style PopupMenu?。我面临同样的问题,搜索了很多,但在所提到的链接中找到了解决方案。

PopupMenu按以下方式创建:

PopupMenu popup = new PopupMenu(context, view);

PopupMenu采用传递的上下文样式,传递Activity作为上下文解决了我的问题。

答案 8 :(得分:0)

<style name="AppTheme1" parent= "android:Theme.DeviceDefault">

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

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

将此添加到您的style.xml文件

<Spinner
android:theme="@style/PopupMenu"
android:popupMenuStyle="@style/PopupMenu"/>

在微调框上设置样式

Height

这也适用于API级别16以上的设备。

答案 11 :(得分:-1)

你可以像这样使用自定义布局..

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

设计布局你想要的......希望这有帮助..