android - 为什么我的弹出菜单是黑色的?

Moh*_*iba 5 android popup

我正在使用内置的 Android 弹出菜单,但结果是这样的:
在此输入图像描述

PopupMenu popupMenu = new PopupMenu(context, holder.menu);
popupMenu.getMenuInflater().inflate(R.menu.item_menu, popupMenu.getMenu());
Run Code Online (Sandbox Code Playgroud)

和 item_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/one"
        android:title="item1"/>
    <item
        android:id="@+id/two"
        android:title="item2"/>
    <item
        android:id="@+id/three"
        android:title="item3"/>
</menu>  
Run Code Online (Sandbox Code Playgroud)

以及主题的样式

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

<style name="PopupMenu" parent="Widget.AppCompat.PopupMenu">
    <item name="android:popupBackground">#FFFFFF</item>
</style>
Run Code Online (Sandbox Code Playgroud)

Ric*_*chi 5

很可能是这样的Context类型:

我的 AppTheme 的父级是Theme.AppCompat.Light.DarkActionBar,我的活动的父级是AppTheme

// Background = black and textColor = black
PopupMenu popupMenu = new PopupMenu(getBaseContext() , view); // don't use getBaseContext()

// Background = black and textColor = white
PopupMenu popupMenu = new PopupMenu(getApplicationContext() , view); // don't use getApplicationContext()
Run Code Online (Sandbox Code Playgroud)

所以你必须只使用 Activity Context:

// Background = light and textColor = dark
PopupMenu popupMenu = new PopupMenu(YourActivity.this , view); // this is ok
Run Code Online (Sandbox Code Playgroud)


se_*_*aan 1

在values-v14/styles.xml中添加以下内容:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="popupMenuStyle">@style/PopupMenu</item>
    <item name="android:popupMenuStyle">@style/PopupMenu</item>
</style>
Run Code Online (Sandbox Code Playgroud)

并更改 PopupMenu 样式:

<style name="PopupMenu" parent="Widget.AppCompat.Light.PopupMenu">
    <item name="android:popupBackground">#FFFFFF</item>
</style>
Run Code Online (Sandbox Code Playgroud)