Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何设计弹出式菜单?_Android_User Interface - Fatal编程技术网

Android 如何设计弹出式菜单?

Android 如何设计弹出式菜单?,android,user-interface,Android,User Interface,是否可以将弹出式菜单样式从白色背景上的默认黑色文本更改为黑色背景,而不将样式应用于整个活动(这会破坏我的UI)?您不能直接设置弹出式菜单样式,但还有其他方法 PopupMenu按以下方式创建: PopupMenu popupMenu=new PopupMenu(context, anchorView); 菜单的样式由您传递的上下文样式决定。所以,您所需要做的就是将您的活动引用作为上下文传递,菜单将相应地进行样式设置 如果要自己定义样式,请从其中一个默认样式继承活动样式,并覆盖以下项目: <

是否可以将弹出式菜单样式从白色背景上的默认黑色文本更改为黑色背景,而不将样式应用于整个活动(这会破坏我的UI)?

您不能直接设置
弹出式菜单
样式,但还有其他方法

PopupMenu
按以下方式创建:

PopupMenu popupMenu=new PopupMenu(context, anchorView);
菜单的样式由您传递的上下文样式决定。所以,您所需要做的就是将您的
活动
引用作为上下文传递,菜单将相应地进行样式设置

如果要自己定义样式,请从其中一个默认样式继承活动样式,并覆盖以下项目:

<style name="style" parent="android:Theme.Holo.Light">
    <item name="android:popupMenuStyle">...</item>
    <item name="android:popupAnimationStyle">...</item>
    <item name="android:popupBackground">...</item>
    <!-- etc etc -->
</style>

...
...
...
除了建议的之外,您还可以将以下属性添加到主题样式中

<style name="style" parent="android:Theme.Holo.Light">        
    <!-- other attributes -->
    <item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
    <item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>

    <item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
    <item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>

    <item name="popupMenuStyle">@style/myPopupMenuStyle</item>
    <item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>
</style>

@style/myPopupMenuTextAppearanceLarge
@style/myPopupMenuTextAppearanceLarge
@style/myPopupMenuTextAppearanceSmall
@style/myPopupMenuTextAppearanceSmall
@样式/myPopupMenuStyle
@样式/myPopupMenuStyle
上述样式定义中引用的其他样式

<style name="myPopupMenuStyle" parent="@style/Widget.AppCompat.Light.PopupMenu">

</style>
<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
    <item name="android:textColor">#000000</item>
</style>
<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large">
    <item name="android:textColor">#000000</item>
</style>

#000000
#000000

在我的xml风格定义中,您会注意到AppCompat的AppCompat,这是因为我正在使用android支持库来针对较低的android API级别。

使用与
操作栏相同的上下文来创建
弹出菜单

actionBar.getThemedContext()

所以

是的,你可以

<style name="YOURSTYLE" parent="Widget.AppCompat.PopupMenu">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:itemBackground">@android:color/holo_red_light</item>
</style>

结果


我对弹出式菜单的设计与其他菜单略有不同

所以,我创造了一种风格

<style name="AppTheme.PopupMenu" parent="Widget.AppCompat.PopupMenu">
    <item name="android:textColor">@color/textContrast</item>
    <item name="android:textColorSecondary">@color/text</item>
</style>
然后像这样设置弹出式样式

toolbar.setPopupTheme(R.style.AppTheme_PopupMenu);

我在做类似的事情!!!在“…”位置设置的值是什么。我尝试了-------------------@android:color/holo_red_light--------------------我在弹出菜单中看不到任何更改[我没有使用其他两个属性]-----------------------------我将活动样式指定为此样式。请告诉我我做错了什么?@Santosh checkout您知道如何使用支持库更改弹出菜单的背景色吗?这会删除弹出窗口周围的边框。这是可行的,但我将我的最小sdk从10更改为11您假设使用Actionbar。弹出窗口可以在没有操作栏的情况下使用。如果工具栏被设置为支持操作栏,那么它也可以很好地工作。谢谢。我发现这么多的“解决方案”一个比另一个更复杂。但这一点是直截了当的,也是最有用的。非常感谢。我们如何减少弹出菜单的宽度
<style name="AppTheme.PopupMenu" parent="Widget.AppCompat.PopupMenu">
    <item name="android:textColor">@color/textContrast</item>
    <item name="android:textColorSecondary">@color/text</item>
</style>
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
toolbar.setPopupTheme(R.style.AppTheme_PopupMenu);