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

时间: 2024-10-17 19:54:24

Android更改popupmenu背景并显示图标的相关文章

android:更改PagerTabStrip背景颜色,标题字体样式、颜色和图标,以及指示条的颜色

1.更改PagerTabStrip背景颜色 我们直接在布局中设置background属性可以: <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="fill_parent" > <android.support.v4.view.PagerTabStr

Android - 安装应用(APP) 不显示图标

安装应用(APP) 不显示图标 本文地址:http://blog.csdn.net/caroline_wendy 在启动的activity的AndroidManifest注册中,添加隐式启动的data: <!-- 启动界面 --> <activity android:name="me.wcl.Activities.WelcomeActivity" android:configChanges="keyboardHidden" android:labe

(转)解决android开发人员,手机app图标显示不正确问题

android程序更换图标安装后不变解决办法 最近在搞android的时候发现,一开始程序使用系统默认图标,等到应用发布的时候要更换图标,结果在测试机上图标就是不变,其他手机和模拟器上都更新了图标. 测试机是小米,据说这个问题只在小米上会出现.网上查了原因说是miui会缓存图标,并且提供了两个解决方法 1.进入目录  /data/system/customized_icons 下,找到你原来的旧图标,删除即可.需要root权限 2.把当前的工程换一个包名,重新安装即可.换了包名等于是一个新的应用

自定义绘制android EditText的背景,定义EditText文字的显示样式

EditText可以通过layer-list来绘制背景: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle" //框为矩形 > &l

Android -- ViewPager滑动背景渐变

原理 总布局为RelativeLayout或者FrameLayout,在这里我们用的是RelativeLayout.先设置背景图片,宽度和高度都fill_parent,在设置viewpager,viewpager的背景要透明哟~这样背景图片就可以显示在页面上.对viewpager进行滑动监听,通过滑动的偏移量对当前背景进行淡出,下一个背景进行显示. 布局 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/an

Android -- 打开本地图片且显示路径

背景                                                                                          代码                                                                                           先上布局文件: <LinearLayout xmlns:android="http://schemas.android.co

【iOS开发-31】UITabBar背景、icon图标颜色、被选中背景设置以及隐藏UITabBar的两种方式

一.对UITabBar背景和icon图标的一些设置 (1)由于直接给UITabBar设置的背景颜色显示的不纯.半透明的感觉,所以,有时候我们能够直接利用纯色的图片作为背景达到想要的效果. (2)给icon图片改变颜色也是重要的有用方法之中的一个,默认的时蓝色. 在AppDelegate.m文件里:(1个导航控制器和5个视图控制器) - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSD

从零开始学android开发- 应用程序窗体显示状态操作requestWindowFeature

我们在开发程序是经常会需要软件全屏显示.自定义标题(使用按钮等控件)和其他的需求,今天这一讲就是如何控制Android应用程序的窗体显示. 首先介绍一个重要方法那就是requestWindowFeature(featrueId),它的功能是启用窗体的扩展特性.参数是Window类中定义的常量. 一.枚举常量 1.DEFAULT_FEATURES:系统默认状态,一般不需要指定 2.FEATURE_CONTEXT_MENU:启用ContextMenu,默认该项已启用,一般无需指定 3.FEATURE

wm命令使用方法及LCD显示图标大小不正常时解决办法

注:Android 4.3引入的wm工具 wm命令及用法: 系统说明: usage: wm [subcommand] [options] wm size [reset|WxH] wm density [reset|DENSITY] wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM] wm size: return or override display size. wm density: override display density. wm overscan: