(1)配置Item
我们可以在res中的menu文件夹中新建一个一个menu文件
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/next"
android:icon="@mipmap/back"
android:title="菜单一"/>
<item
android:id="@+id/add"
android:icon="@mipmap/back"
android:title="菜单二"/>
<item
android:id="@+id/detail"
android:icon="@mipmap/back"
android:title="菜单三"/>
<item
android:id="@+id/del"
android:icon="@mipmap/back"
android:title="菜单四"/>
</menu>
(2)使用PopupMenu
// 这里的view代表popupMenu需要依附的view
PopupMenu popupMenu = new PopupMenu(MainActivity.this, view);
// 获取布局文件
popupMenu.getMenuInflater().inflate(R.menu.popup_demo, popupMenu.getMenu());
popupMenu.show();
// 通过上面这几行代码,就可以把控件显示出来了
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override public boolean onMenuItemClick(MenuItem item) {
// 控件每一个item的点击事件
return true;
}
});
popupMenu.setOnDismissListener(new PopupMenu.OnDismissListener() {
@Override public void onDismiss(PopupMenu menu) {
// 控件消失时的事件
}
});
加载menu配置,监听popup事件。
效果如下:
图片.png(3)让图片展示
采用反射机制,让图片展示出来
try {
Field field = popupMenu.getClass().getDeclaredField("mPopup");
field.setAccessible(true);
MenuPopupHelper helper = (MenuPopupHelper) field.get(popupMenu);
helper.setForceShowIcon(true);
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
效果如下:
图片.png
网友评论