Android通過Dialog實(shí)現(xiàn)全屏的示例代碼
引言
在項(xiàng)目的實(shí)際開發(fā)中會碰到有些View需要橫屏全屏的情況,比如視頻播放的View,詳情的View等,如果跳轉(zhuǎn)到新的Activity或Fragment來展示橫屏全屏,有些進(jìn)度、狀態(tài)等攜帶過去又很麻煩,這樣的情況下通過Dialog實(shí)現(xiàn)全屏就是一個選擇。
一、Dialog的初始化
一般情況下Activity或Fragment需要顯示狀態(tài)欄和導(dǎo)航欄,但是在Dialog全屏的時候是需要全屏的,如果還顯示狀態(tài)欄和導(dǎo)航欄就會有問題,重點(diǎn)在于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)
//一定要加這部分代碼,可以實(shí)現(xiàn)全屏
window?.decorView?.systemUiVisibility = (
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
}
}
二、全屏和非全屏的實(shí)現(xiàn)
思路其實(shí)是將整個需要全屏的View,添加給Dialog即可。
@SuppressLint("SourceLockedOrientationActivity")
private fun openFullscreenDialog() {
//旋轉(zhuǎn)為橫屏
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() {
//旋轉(zhuǎn)為豎屏
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可以非常簡單的同步各種加載、失敗、錯誤、進(jìn)度等狀態(tài)的UI,有些細(xì)節(jié)可能還要在實(shí)際開發(fā)中調(diào)整。
到此這篇關(guān)于Android通過Dialog實(shí)現(xiàn)全屏的示例代碼的文章就介紹到這了,更多相關(guān)Android Dialog實(shí)現(xiàn)全屏內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Android如何實(shí)現(xiàn)不同大小的圓角
在開發(fā)過程中,設(shè)計(jì)常常會有一些比較炫酷的想法,比如兩邊不一樣大小的圓角啦,甚至四角的radius各不相同,對于這種情況我們該怎么實(shí)現(xiàn)呢,本文小編就和大家來聊聊,需要的朋友可以參考下2023-08-08
Android App中自定義View視圖的實(shí)例教程
這篇文章主要介紹了Android App中自定義View視圖的實(shí)例教程,詳細(xì)講解了如何在創(chuàng)建View中定義各種鎖需要的樣式屬性,需要的朋友可以參考下2016-04-04
Eclipse工程轉(zhuǎn)為兼容Android Studio模式的方法步驟圖文詳解
這篇文章主要介紹了Eclipse工程轉(zhuǎn)為兼容Android Studio模式的方法步驟,本文圖文并茂給大家介紹的非常詳細(xì),需要的朋友可以參考下2017-12-12
Android中Json數(shù)據(jù)讀取與創(chuàng)建的方法
android 讀取json數(shù)據(jù),下面小編給大家整理有關(guān)Android中Json數(shù)據(jù)讀取與創(chuàng)建的方法,需要的朋友可以參考下2015-08-08
Flutter開發(fā)技巧RadialGradient中radius計(jì)算詳解
這篇文章主要為大家介紹了Flutter小技巧RadialGradient?中?radius?的計(jì)算詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Android SDK Manager更新、下載速度慢問題解決辦法
這篇文章主要介紹了Android SDK Manager更新、下載速度慢問題解決辦法的相關(guān)資料,需要的朋友可以參考下2017-05-05
AndroidStudio 實(shí)現(xiàn)加載字體資源的方法
這篇文章主要介紹了AndroidStudio 實(shí)現(xiàn)加載字體資源的方法的相關(guān)資料,這里提供了詳細(xì)的實(shí)現(xiàn)方法,需要的朋友可以參考下2016-11-11

