三槐堂 發表於 2025-10-12 13:46:18

Android通过Dialog实现全屏的示例代码

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>引言</li><li>一、Dialog的初始化</li><li>二、全屏和非全屏的实现</li></ul></div><p class="maodian"></p><h2>引言</h2>
<p>在项目的实际开发中会碰到有些View需要横屏全屏的情况,比如视频播放的View,详情的View等,如果跳转到新的Activity或Fragment来展示横屏全屏,有些进度、状态等携带过去又很麻烦,这样的情况下通过Dialog实现全屏就是一个选择。</p>
<p class="maodian"></p><h2>一、Dialog的初始化</h2>
<p>一般情况下Activity或Fragment需要显示状态栏和导航栏,但是在Dialog全屏的时候是需要全屏的,如果还显示状态栏和导航栏就会有问题,重点在于Dialog的初始化方式。最简单的初始化方式如下:</p>
<div class="jb51code"><pre class="brush:java;">private var fullscreenDialog: Dialog? = null

/**
* 初始化全屏播放的Dialog
*/
private fun initFullScreenDialog() {
    fullscreenDialog = object : Dialog(requireActivity(), android.R.style.Theme_Black_NoTitleBar_Fullscreen) {
      @Deprecated("Deprecated in Java")
      override fun onBackPressed() {
             Log.d(TAG,"close fullscreen")
             toggleFullscreen()
            //super.onBackPressed()
      }

      override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            //一定要加这部分代码,可以实现全屏
            window?.decorView?.systemUiVisibility = (
                  View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                            or View.SYSTEM_UI_FLAG_FULLSCREEN)
      }
    }
}
</pre></div>
<p class="maodian"></p><h2>二、全屏和非全屏的实现</h2>
<p>思路其实是将整个需要全屏的View,添加给Dialog即可。</p>
<div class="jb51code"><pre class="brush:java;">@SuppressLint("SourceLockedOrientationActivity")
private fun openFullscreenDialog() {
    //旋转为横屏
    requireActivity().requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
    //从父View中移除需要全屏的View
    binding.clContainer.removeView(binding.fullscreenView)
    //将需要全屏的View添加到Dialog
    fullscreenDialog?.addContentView(
      binding.fullscreenView,
      ViewGroup.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.MATCH_PARENT
      )
    )
    isFullscreen = true
    //显示Dialog
    fullscreenDialog?.show()
}


private fun closeFullscreenDialog() {
    //旋转为竖屏
    requireActivity().requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    //(binding.exoPlayerView.parent.parent as ViewGroup).removeAllViews()
    //将View又重新添加回来
    binding.clContainer.addView(binding.fullscreenView)
    isFullscreen = false
    //退出Dialog
    fullscreenDialog?.dismiss()
}
</pre></div>
<p>比如在视频播放的View可以非常简单的同步各种加载、失败、错误、进度等状态的UI,有些细节可能还要在实际开发中调整。</p>
<p>到此这篇关于Android通过Dialog实现全屏的示例代码的文章就介绍到这了,更多相关Android Dialog实现全屏内容请搜索琼殿技术社区以前的文章或继续浏览下面的相关文章希望大家以后多多支持琼殿技术社区!</p>
                           
                            <div class="art_xg">
                              <b>您可能感兴趣的文章:</b><ul><li>android 中ProgressDialog实现全屏效果的示例</li><li>Android中Dialog的使用详解</li><li>Android 自定义 Dialog 实现列表 单选、多选、搜索功能</li><li>Android使用AlertDialog实现弹出菜单的详细过程</li></ul>
                            </div>

                        </div>
                        <!--endmain-->
頁: [1]
查看完整版本: Android通过Dialog实现全屏的示例代码