object PopupMenuUtils {
private lateinit var popupMenu: PopupMenu
interface MenuItemClick : PopupMenu.OnMenuItemClickListener {
override fun onMenuItemClick(item: MenuItem?): Boolean {
return false
}
}
@SuppressLint("RestrictedApi")
fun showMenu(contentString: String, view: View, context: Context, menuRes: Int, listener: PopupMenu.OnMenuItemClickListener) {
RxViewUtils.clicks(view, context).subscribe {
//创建弹出式菜单对象(最低版本11)
popupMenu = PopupMenu(context, view) //第二个参数是绑定的那个view
//获取菜单填充器
val inflater = popupMenu.menuInflater
//填充菜单
inflater.inflate(menuRes, popupMenu.menu)
popupMenu.setOnMenuItemClickListener(listener)
try {
val mPopupHelper = popupMenu.javaClass.getDeclaredField("mPopup")
mPopupHelper.isAccessible = true
val mHelper = mPopupHelper[popupMenu] as MenuPopupHelper
//不显示图标
mHelper.setForceShowIcon(false)
val standardMenuClass = Class.forName("android.support.v7.view.menu.StandardMenuPopup")
// 设置不测量item宽度
val mHasContentWidth = standardMenuClass.getDeclaredField("mHasContentWidth")
mHasContentWidth.isAccessible = true
mHasContentWidth.setBoolean(mHelper.popup, true)
// 设置弹出框宽度
val mContentWidth = standardMenuClass.getDeclaredField("mContentWidth")
mContentWidth.isAccessible = true
mContentWidth.setInt(mHelper.popup, DisplayUtil.getTextIntWidth(context, contentString+"哎哎哎", 14))
} catch (e: Exception) {
e.printStackTrace()
} finally {
popupMenu.show()
}
}
}
}