引言
在项目的实际开发中会碰到有些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实现全屏内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论