(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配置,監(jiān)聽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