Fragment中PopupMenu显示位置异常,如何设置为右上角?
要让PopupMenu显示在屏幕右上角,你需要调整两个关键设置:锚点View和显示重力,具体修改如下:
1. 修正锚点View
你当前传入showPopup的是Fragment的根布局binding.root,这会让PopupMenu相对于整个根布局定位,自然会出现在错误位置。应该把触发点击的menuImageView作为锚点,让菜单围绕这个按钮对齐。
2. 设置显示重力
通过PopupMenu.setGravity()指定菜单的显示方向,设置为Gravity.TOP | Gravity.END就能让菜单显示在锚点的右上角(对应屏幕右上角区域)。
修改后的完整代码:
override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { binding = FragmentProfileBinding.inflate(layoutInflater) setHasOptionsMenu(true) binding.menuImageView.setOnClickListener(){ // 传入menuImageView作为锚点 showPopup(binding.menuImageView) } return binding.root } fun showPopup(v: View){ val popup = PopupMenu(context, v) // 设置重力为右上角 popup.gravity = Gravity.TOP or Gravity.END val inflater: MenuInflater = popup.menuInflater inflater.inflate(R.menu.profile_menu, popup.menu) popup.setOnMenuItemClickListener { menuItem -> when(menuItem.itemId){ R.id.about_menu-> { // 处理关于菜单逻辑 } R.id.signout_menu-> { // 处理退出登录逻辑 } } true } popup.show() }
如果你的菜单需要显示图标,Android 7.0及以上系统默认隐藏图标,可以添加以下代码强制显示:
popup.setForceShowIcon(true)
内容的提问来源于stack exchange,提问作者Adria Fernandez
相关产品推荐
相关产品推荐

