Android dialog 去掉狀態欄全屏顯示

周董鎮樓.png

今天做微信分享功能,想實現類似新浪微博長圖分享的功能,這個功能長得啥樣呢?
請見下圖

新浪長圖分享功能.gif

嗯,大致長這樣。
不過,有沒有覺得上邊的狀態欄那個邊很丑啊

所以,為了將上方狀態欄給弄掉,我開始了日常搜索,心想這點事應該不是什么大問題,隨便 cv 一下不就行了

結果,翻車了,cv 了5、6次,一點用沒有......

好吧,這就是為什么會出現我這里的這篇文章了。

分析一下

既然想讓狀態攔去掉,那么其實是 dialog 依附的這個 activity 狀態攔去掉,不過,我們不需要直接操作這個 被依附的 activity ,只需要拿到 dialog 的 window,然后對這個 window 操作即可。

那么我這邊怎么操作呢?

大前提

布局搭建應該不是大問題,但是要做這樣的布局還是要花點時間的,這個我就直接略過,如果布局搭建有問題的話,可以私信。

開始吧

首先給 dialog 的根布局設置他的樣式,設置方法是在 自定義的 Dialog 的 onStart() 方法中設置如下

 @Override
protected void onStart() {
    super.onStart();
    int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_IMMERSIVE
            | View.SYSTEM_UI_FLAG_FULLSCREEN;
    this.getWindow().getDecorView().setSystemUiVisibility(uiOptions);
}

這是第一步,可能有的機型設置完這一步就 ok 了,但是,為了保證都能兼容到,最好再設置上我的下一步

在給 dialog 設置自定義布局之前,給 dialog 的 window 設置 屬性

Window  window= dialog.getWindow();
//全屏顯示
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
// android 5.0 需要做一下    
 if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        //給 dialog 的頂層view 添加一個狀態欄收起監聽,讓狀態欄收起
        ViewCompat.setOnApplyWindowInsetsListener(wd.getDecorView(), new OnApplyWindowInsetsListener() {
            @Override
            public WindowInsetsCompat onApplyWindowInsets(View v, WindowInsetsCompat insets) {
                return insets.consumeSystemWindowInsets();
            }
        });
    }

對我來說,這一步才是關鍵。

ok ,做完這兩步,我的分享就成功了,可以看下我做完的案例(版權問題做了一些遮擋):

my_ps.gif

嗯 大致就是這樣子吧,今天就到這里吧~ 哇哇哇

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容