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

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

全屏沉浸模式ImmersiveMode

2019-11-10 17:54:43
字體:
來源:轉載
供稿:網友

在寫播放器的時候,遇到了關于全屏模式的坑。翻閱了網上一些資料和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
色综合天天狠天天透天天伊人| 亚洲欧洲日产国码av系列天堂| 91av在线免费观看视频| 色无极影院亚洲| 国产一区二区香蕉| 亚洲黄色在线看| 久久久免费精品视频| 欧美性videos高清精品| 亚洲欧洲视频在线| 2019中文字幕全在线观看| 日韩欧美在线观看视频| 亚洲bt欧美bt日本bt| 成人深夜直播免费观看| 亚洲国产精品va在线| 亚洲精品视频中文字幕| 色黄久久久久久| 日韩激情片免费| 久久久久999| 亚洲老板91色精品久久| 欧美丰满少妇xxxxx| 日本欧美一级片| 亚洲国产成人久久综合一区| 国产欧美亚洲精品| 91成人精品网站| 亚洲性夜色噜噜噜7777| 亚洲国产精品成人av| 亚洲аv电影天堂网| 久久精品久久久久久国产 免费| 日本亚洲欧洲色α| 日韩av免费在线观看| 中文字幕精品一区久久久久| 亚洲欧美日韩天堂一区二区| 国产在线高清精品| 久久久精品欧美| 欧美性猛交xxxxx水多| 亚洲成人在线网| 日韩在线免费观看视频| 亚洲人成网站免费播放| 日产日韩在线亚洲欧美| 久久成人精品电影| 国产欧美精品一区二区三区介绍| 国产精品久久久久久影视| 一区二区三区视频免费在线观看| 国产日韩在线免费| 亚洲欧美日韩区| 国产成人小视频在线观看| 一区二区三区天堂av| 国产精品劲爆视频| 亚洲国产精品久久91精品| 丝袜美腿亚洲一区二区| 国产v综合ⅴ日韩v欧美大片| 4388成人网| 欧美性xxxxxxxxx| 91精品国产综合久久香蕉最新版| 亚洲成人xxx| 国产精品久久不能| 亚洲黄色有码视频| 日韩国产高清污视频在线观看| 国产精品久久久久久久app| 最近2019年手机中文字幕| 在线免费观看羞羞视频一区二区| 国产一区二区三区直播精品电影| 国产精品美女在线| 国模叶桐国产精品一区| 91亚洲精品久久久久久久久久久久| 亚洲精品久久7777777| 日本人成精品视频在线| 国产美女久久精品香蕉69| 成人日韩在线电影| 成人免费高清完整版在线观看| 久久99久久99精品免观看粉嫩| 欧美三级xxx| 黄网站色欧美视频| 久久久久久国产| 久久久久久久一区二区| 亚洲精品影视在线观看| 国产成人精品免高潮费视频| 国产一区二区在线免费| 精品视频在线观看日韩| 91免费国产网站| 成人黄色av播放免费| 26uuu日韩精品一区二区| 日韩中文在线中文网三级| 国产午夜精品视频免费不卡69堂| 国产中文欧美精品| 亚洲图片制服诱惑| 国产免费一区二区三区香蕉精| 国产亚洲精品久久久优势| 亚洲福利视频二区| 亚洲v日韩v综合v精品v| 国内精品久久久久伊人av| 欧美成人四级hd版| 91精品啪aⅴ在线观看国产| 国产精品爽爽爽爽爽爽在线观看| 久久这里只有精品99| 久久露脸国产精品| 狠狠做深爱婷婷久久综合一区| 亚洲深夜福利在线| 亚洲国语精品自产拍在线观看| 久久精品视频在线观看| 亚洲美女精品成人在线视频| 91精品视频网站| 欧美激情免费看| 不卡伊人av在线播放| 69久久夜色精品国产69| 亚洲精品视频免费在线观看| 欧美国产极速在线| 久久久久久久一区二区| 亚洲欧洲一区二区三区久久| 欧美一区亚洲一区| 欧美精品xxx| 亚洲国产高清自拍| 日本亚洲欧洲色α| 亚洲网站在线观看| 欧美电影在线观看| 日韩精品在线观| 久久免费成人精品视频| 国产精品扒开腿做爽爽爽视频| 亚洲区在线播放| 中文亚洲视频在线| 韩日欧美一区二区| 成人国产精品免费视频| 亚洲激情视频在线| 国产精品美女久久久久久免费| 欧美怡春院一区二区三区| 国产午夜精品全部视频在线播放| 97人人爽人人喊人人模波多| 欧美成人精品在线视频| 亚洲va欧美va在线观看| 中文字幕国产精品| 亚洲在线www| 亚洲视频在线播放| 精品国产一区二区三区久久久狼| 久久五月天色综合| 欧美一级片在线播放| 亚洲欧美中文字幕在线一区| 亚洲毛片在线看| 91tv亚洲精品香蕉国产一区7ujn| 亚洲欧美日韩精品久久| 亚洲精品中文字幕av| 欧美专区日韩视频| 欧美高清无遮挡| 7777精品久久久久久| 国产视频欧美视频| 国产精品一区二区三| 久久久免费观看| 日韩在线观看免费全集电视剧网站| 91精品国产91久久久久福利| 国产亚洲欧洲高清一区| 北条麻妃久久精品| 国产精品精品久久久| 国产精品综合网站| 成人精品久久一区二区三区| 久久久久www| 91午夜在线播放| 亚洲精品自拍视频| 国产精品国产三级国产aⅴ浪潮| 欧美精品videossex88| 欧美国产中文字幕| 亚洲一品av免费观看| 色香阁99久久精品久久久| 久久精品视频网站| 国产精品免费一区二区三区都可以| 欧美丝袜一区二区|