亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

全屏沉浸模式ImmersiveMode

2019-11-10 20:12:30
字體:
來源:轉載
供稿:網友

在寫播放器的時候,遇到了關于全屏模式的坑。翻閱了網上一些資料和google 官方的demo后,終于把坑填完了。

全屏主要的干擾就是 頂部狀態欄stateBar和部分手機的虛擬按鍵NavigationBar。

這是google demo的源碼

    /**     * Detects and toggles immersive mode (also known as "hidey bar" mode).     */    public void toggleHideyBar() {        // BEGIN_INCLUDE (get_current_ui_flags)        // The UI options currently enabled are rePResented by a bitfield.        // getSystemUiVisibility() gives us that bitfield.        int uiOptions = getActivity().getWindow().getDecorView().getSystemUiVisibility();        int newUiOptions = uiOptions;        // END_INCLUDE (get_current_ui_flags)        // BEGIN_INCLUDE (toggle_ui_flags)        boolean isImmersiveModeEnabled =                ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);        if (isImmersiveModeEnabled) {            Log.i(TAG, "Turning immersive mode mode off. ");        } else {            Log.i(TAG, "Turning immersive mode mode on.");        }        // Navigation bar hiding:  Backwards compatible to ICS.        if (Build.VERSION.SDK_INT >= 14) {            newUiOptions ^= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;        }        // Status bar hiding: Backwards compatible to Jellybean        if (Build.VERSION.SDK_INT >= 16) {            newUiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;        }        // Immersive mode: Backward compatible to KitKat.        // Note that this flag doesn't do anything by itself, it only augments the behavior        // of HIDE_NAVIGATION and FLAG_FULLSCREEN.  For the purposes of this sample        // all three flags are being toggled together.        // Note that there are two immersive mode UI flags, one of which is referred to as "sticky".        // Sticky immersive mode differs in that it makes the navigation and status bars        // semi-transparent, and the UI flag does not get cleared when the user interacts with        // the screen.        if (Build.VERSION.SDK_INT >= 18) {            newUiOptions ^= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;        }        getActivity().getWindow().getDecorView().setSystemUiVisibility(newUiOptions);        //END_INCLUDE (set_ui_flags)    }

這個demo比較簡單,不做詳細的解釋。就簡單的介紹下Flag等意思。

getActivity().getWindow().getDecorView() //獲取當前頁面的跟布局。View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;//控制NavigationBar的隱藏于顯示。View.SYSTEM_UI_FLAG_FULLSCREEN;//控制stateBar的隱藏與顯示。View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;這個標簽比較有趣。其實這個標簽有兩個:View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY 和 View.SYSTEM_UI_FLAG_IMMERSIVE。這兩個標簽都必須和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION、View.SYSTEM_UI_FLAG_FULLSCREEN 一起使用。

下面分為3中情況:

1、只使用View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 和 View.SYSTEM_UI_FLAG_FULLSCREEN 。

這種情況下,在進入全屏模式后,用戶有任何操作,SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN 就會被清除。狀態欄和虛擬按鍵會一直可見。除非再次設置SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN。在狀態欄和虛擬按鍵顯示變化時會調用View.OnSystemUiVisibilityChangeListener。

2、SYSTEM_UI_FLAG_IMMERSIVE 配合View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 和 View.SYSTEM_UI_FLAG_FULLSCREEN使用。

用戶操作不會清除SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN。會一直保持全屏模式。顯示切換時也會觸發View.OnSystemUiVisibilityChangeListener。還有一個區別就是 ,全屏模式時,從原本狀態欄或者虛擬按鍵的位置 響屏幕內部滑動,會清除SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN,保持可見狀態,并且也會觸發View.OnSystemUiVisibilityChangeListener監聽。

3.SYSTEM_UI_FLAG_IMMERSIVE_STICKY配合View.SYSTEM_UI_FLAG_HIDE_NAVIGATION 和 View.SYSTEM_UI_FLAG_FULLSCREEN使用。

用戶操作不會清除SYSTEM_UI_FLAG_HIDE_NAVIGATION和SYSTEM_UI_FLAG_FULLSCREEN。會一直保持全屏模式。顯示切換時也會觸發View.OnSystemUiVisibilityChangeListener。,全屏模式時,,從原本狀態欄或者虛擬按鍵的位置 響屏幕內部滑動, 狀態欄 和 虛擬按鍵欄會暫時可見,一段時間后自動隱藏。與SYSTEM_UI_FLAG_IMMERSIVE 不同的是,因為是臨時的顯示,所以不會觸發View.OnSystemUiVisibilityChangeListener??赡苷f的有點混亂,可以參考下下面的表格。

個人覺得使用toggleHideyBar()來控制有點不順手,所以拆分成了showBar()和hideBar()。

    public void showBar(){        int uiOptions = getWindow().getDecorView().getSystemUiVisibility();        int newUiOptions = uiOptions;        boolean isImmersiveModeEnabled =                ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);        if (isImmersiveModeEnabled) {            Log.i(TAG, "Turning immersive mode mode off. ");                        //先取 非 后再 與, 把對應位置的1 置成0,原本為0的還是0                        if (Build.VERSION.SDK_INT >= 14) {                newUiOptions &= ~View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;            }                       if (Build.VERSION.SDK_INT >= 16) {                newUiOptions &= ~View.SYSTEM_UI_FLAG_FULLSCREEN;            }                    if (Build.VERSION.SDK_INT >= 18) {                newUiOptions &= ~View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;            }            getWindow().getDecorView().setSystemUiVisibility(newUiOptions);        }    }    public void hideBar() {        // The UI options currently enabled are represented by a bitfield.        // getSystemUiVisibility() gives us that bitfield.        int uiOptions = getWindow().getDecorView().getSystemUiVisibility();        int newUiOptions = uiOptions;        boolean isImmersiveModeEnabled =                ((uiOptions | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) == uiOptions);        if (!isImmersiveModeEnabled) {            Log.i(TAG, "Turning immersive mode mode on. ");                  if (Build.VERSION.SDK_INT >= 14) {                newUiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;            }                     if (Build.VERSION.SDK_INT >= 16) {                newUiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN;            }            if (Build.VERSION.SDK_INT >= 18) {                newUiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;            }            getWindow().getDecorView().setSystemUiVisibility(newUiOptions);        }    }暫時就寫這么多吧。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美激情高清视频| 精品国产美女在线| 欧美视频二区36p| 国产精品露脸av在线| 综合av色偷偷网| 亚洲中国色老太| 日本老师69xxx| 日韩精品在线电影| 夜夜嗨av色一区二区不卡| 亚洲天堂av在线免费观看| 国产91精品久久久久久| 精品福利在线看| 国产精品无码专区在线观看| 国产欧美在线播放| 国产精品免费久久久久影院| 日本成熟性欧美| 狠狠色香婷婷久久亚洲精品| 亚洲成人av在线| 欧美肥老妇视频| 一区二区av在线| 欧美日韩成人在线观看| 欧美裸体xxxx| 亚洲福利在线看| 国产精品丝袜久久久久久不卡| www.日韩系列| 欧美日韩国产中字| 久热在线中文字幕色999舞| 亚洲欧美日韩精品久久奇米色影视| 国产精品都在这里| 欧美日韩成人在线观看| 国产亚洲精品综合一区91| 98视频在线噜噜噜国产| 国产精品v日韩精品| 国产精品成人品| 91沈先生作品| 精品香蕉一区二区三区| 久久国产精品久久久久| 国产精品久久综合av爱欲tv| 国产精品天天狠天天看| 亚洲天堂男人的天堂| 国产美女久久精品香蕉69| 成人欧美一区二区三区黑人| 97免费视频在线| 91精品久久久久| 国产一区二区三区视频| 亚洲精品自拍偷拍| 蜜月aⅴ免费一区二区三区| 国产亚洲欧美日韩精品| 黑人精品xxx一区一二区| 永久免费精品影视网站| 欧美性感美女h网站在线观看免费| 97超碰蝌蚪网人人做人人爽| 亚洲伦理中文字幕| 欧美夫妻性生活视频| 美女视频黄免费的亚洲男人天堂| 亚洲三级av在线| 欧美激情啊啊啊| xxxxx成人.com| 成人激情视频免费在线| 在线观看欧美日韩国产| 亚洲精品视频中文字幕| 77777少妇光屁股久久一区| 国产一区玩具在线观看| 国产亚洲xxx| 欧美激情精品久久久久久大尺度| 欧美日韩国产综合新一区| 91夜夜揉人人捏人人添红杏| 欧美性xxxxx| 日韩经典中文字幕| 欧美日韩免费在线观看| 中文字幕亚洲一区| 国产精品久久久久久久av电影| 久久精品在线播放| 伊人一区二区三区久久精品| 亚洲精品中文字幕女同| 一区二区三区美女xx视频| 国产精品www网站| 欧美大学生性色视频| 亚洲欧美日韩另类| 国产精品久久在线观看| 国产精品99免视看9| 国产日韩欧美电影在线观看| 欧美激情区在线播放| 久久久噜久噜久久综合| 2019中文字幕在线观看| 中文字幕免费国产精品| 成人亚洲欧美一区二区三区| 在线播放日韩欧美| 青青久久av北条麻妃海外网| 久久精品人人做人人爽| 国产一区二区三区在线观看视频| 日本一欧美一欧美一亚洲视频| 日韩中文字幕欧美| 日韩禁在线播放| 国产欧美日韩精品在线观看| 91欧美视频网站| 国产成人亚洲精品| 欧美寡妇偷汉性猛交| 日韩精品丝袜在线| 日韩精品丝袜在线| 亚洲欧洲美洲在线综合| 亚洲xxx自由成熟| 91高清在线免费观看| 国产精品色午夜在线观看| 日韩精品免费在线观看| 国产日韩换脸av一区在线观看| 亚洲免费高清视频| 91日本在线视频| 91在线无精精品一区二区| 欧美日韩久久久久| 国产一区二区三区在线观看视频| 97久久超碰福利国产精品…| 亚洲国产中文字幕在线观看| 国产精品久久久久久久久久久久| 久久久免费精品视频| 欧美日韩在线视频一区| 久久久精品亚洲| 欧美性xxxx极品高清hd直播| 中文字幕亚洲综合| 亚洲免费视频在线观看| 欧美高跟鞋交xxxxhd| 91久久久国产精品| 精品欧美国产一区二区三区| 国产在线视频欧美| 日韩成人在线免费观看| 国产91久久婷婷一区二区| 亚洲欧洲日本专区| y97精品国产97久久久久久| 久久久久久久久久久亚洲| 亚洲欧美另类自拍| 欧美日韩国产在线| 久久在线免费观看视频| 亚洲二区在线播放视频| 久久综合伊人77777尤物| 精品国产31久久久久久| 久久久av一区| 午夜伦理精品一区| 91色p视频在线| 亚洲日韩欧美视频| 日韩一级黄色av| 亚洲一区二区日本| 国内精品小视频| 日韩av中文字幕在线| 精品国产一区二区三区在线观看| 欧美激情啊啊啊| 久久手机精品视频| 国产欧美日韩中文| 亚洲激情在线观看视频免费| 亚洲精品天天看| 成人www视频在线观看| 欧美大肥婆大肥bbbbb| 欧美日韩一二三四五区| 2020国产精品视频| 久久这里只有精品99| 国产视频欧美视频| 亚洲成成品网站| 亚洲a区在线视频| 乱亲女秽乱长久久久| 亚洲色图激情小说| 色综合亚洲精品激情狠狠| 91av在线精品| 国产日韩在线亚洲字幕中文| 国产亚洲精品日韩| 日韩精品视频免费在线观看|