Android API中的沉浸模式即全屏模式,可以通过设置 SYSTEM_UI_FLAG_FULLSCREEN 标志来实现。弹出菜单可以通过 PopupMenu 类来创建。
在使用沉浸模式和弹出菜单的时候,有一个已知的bug导致在弹出菜单显示时退出全屏模式。如果我们在 Fragment 中同时使用了沉浸模式和弹出菜单,很容易遇到这个问题。
为了解决这个问题,我们可以使用以下代码:
// 弹出菜单显示时隐藏全屏模式 popupMenu.setOnMenuItemClickListener { menuItem -> activity?.window?.decorView?.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE true }
// 隐藏弹出菜单时重新设置全屏模式 popupMenu.setOnDismissListener { activity?.window?.decorView?.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN }
我们在弹出菜单的监听器中设置系统UI的标志,以便在显示菜单时退出全屏模式。在弹出菜单关闭时,重新设置为全屏模式。 这样就可以在进行弹出菜单操作时,保持全屏状态。
注意:这里的 activity 是需要在 Fragment 中获取的,可以通过 getActivity() 方法获取。
示例代码如下:
class MainFragment : Fragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_main, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val imageView = view.findViewById(R.id.imageView)
imageView.setOnClickListener {
toggleFullscreen()
}
val button = view.findViewById