平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Android借助Dialog实现方法全屏的示例代码”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
引言
结合项目来看,在项目的真实开发场景下会碰到有些View需横屏全屏的情况,比如视频播放的View,详情的View等,如果跳转到新的Activity或Fragment来展示横屏全屏,有些进度、状态等携带过去又很麻烦,这样的情况下借助Dialog实现全屏就是一个选择。
一、Dialog的初始化
从实现思路看,一般情况下Activity或Fragment需显示状态栏和导航栏,但是在Dialog全屏的时候是需全屏的,如果还显示状态栏和导航栏就会有问题,重点在于Dialog的初始化方式。最轻松的初始化方式如下所示:
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)
}
}
}
二、全屏和非全屏的实现
思路其实是将整个需全屏的View,添加给Dialog即可。
@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()
}
结合项目来看,比如在视频播放的View能够很轻松的同步各种加载、失败、错误、进度等状态的UI,有些细节可能还要在真实项目中调整。
到此这篇关于Android借助Dialog实现全屏的示例的文章就介绍到这了,更多相关Android Dialog实现全屏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!
- android 中ProgressDialog实现全屏效果的示例
- Android中Dialog的采用详解
- Android 自定义 Dialog 实现列表 单选、多选、搜索功能
- Android采用AlertDialog实现弹出菜单的详细过程