Android更改popupmenu背景并显示图标

似乎popupmenu是无法单独设置style的,好像是由context决定的,前几天需要设置style,找了很久才找一一个办法,似乎是通过 ContextThemeWrapper 包装一个 Context 然后把 Context 作为参数传递给popupmenu的构造函数

java代码如下

/**************************************************************************/
       Context wrapper = new ContextThemeWrapper(this, R.style.MyPopupStyle);
/**************************************************************************/

       PopupMenu popupMenu = new PopupMenu(wrapper, view);
       popupMenu.getMenuInflater().inflate(R.menu.user_main_toolbar_add_items, popupMenu.getMenu());
       popupMenu.show();

  

style文件如下

<style name="MyPopupStyle" parent="Widget.AppCompat.PopupMenu">
        <item name="android:itemBackground">@drawable/toolbar_item_selector</item>
        <item name="android:textColor">@color/whitesmoke</item>
</style>

  

记得当时使用background属性是无效的,改成了itembackground才有了效果

而且为了使popupmenu可以显示icon,找了一种方法,并没有去查原因,仅仅是用了,代码如下

/**************************************************************************/
     Context wrapper = new ContextThemeWrapper(this, R.style.MyPopupStyle);
/**************************************************************************/

     PopupMenu menu = new PopupMenu(wrapper, view);
     menu.inflate(R.menu.user_main_toolbar_add_items);

     MenuPopupHelper menuHelper = new MenuPopupHelper(wrapper, (MenuBuilder) menu.getMenu(), view);
     menuHelper.setForceShowIcon(true);
     menuHelper.show();

  

而且官方文档好像没搜到这个类,谷歌第一条是源代码,里面有各个方法的说明,包括setForceShowIcon,

本文本来只用来自己参考的,不过可能会有人看到,还是贴出链接,可以看下

MenuPopupHelper。java

 

转载于:https://www.cnblogs.com/liupy/p/9414250.html

Android中,PopupMenu是一种常用的弹出菜单,通常用于提供一些附加操作供用户选择。要控制PopupMenu显示,你可以按照以下步骤操作: 1. **创建PopupMenu实例**: 首先,你需要创建一个`PopupMenu`对象,并指定其将显示的位置。这通常通过一个`Context`对象(如Activity、Fragment等)以及一个Point对象(表示屏幕坐标)来完成。 ```java PopupMenu popup = new PopupMenu(context, view); ``` 这里的`context`是你当前的活动环境,`view`是你想要从其位置弹出菜单的视图。 2. **添加选项**: 添加到PopupMenu的选项通常是通过`add()`方法,可以传入菜单项的文字和对应的监听器。例如: ```java popup.add(MenuInflater.inflate(R.menu.popup_menu_resource_id, menu), index, itemId); ``` 这里,`R.menu.popup_menu_resource_id`是一个资源ID,指向XML布局文件中定义的菜单项列表。 3. **设置显示与关闭**: 调用`show()`方法来实际显示菜单: ```java popup.show(); ``` 当用户选择了一个菜单项,`onMenuItemSelected()`方法会被回调,这是你处理用户选择的地方。关闭时,一般不需要显式地关闭,因为它会在用户点击外部区域或者选择其他菜单项时自动消失。 ```java @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // 处理每个菜单项的选择... } return super.onOptionsItemSelected(item); } popup.dismiss(); // 如果需要手动隐藏 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值