日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

沉浸式状态栏的实现

發(fā)布時間:2023/12/18 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 沉浸式状态栏的实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一個Android應(yīng)用程序的界面有好多系統(tǒng)元素

有狀態(tài)欄,ToolBar,導(dǎo)航欄,而打造沉浸式狀態(tài)欄則是將這些屬性隱藏,只留下主體,所謂沉浸式,就是讓用戶像是沉浸在頁面里一樣,在做沉浸式狀態(tài)欄之前呢,我先帶大家了解一下項目中values的含義

?

有時我們會在項目中看到values-v11,values-v14,values-v19等文件夾,里面有dimens,styles等。那具體代表是什么呢?到了4.0以上系統(tǒng),多了v14等文件夾,之后才明白跟android 的api版本有關(guān)系。

?

?values-v11代表在API 11+的設(shè)備上,其中API 11+代表android 3.0 +,3.0以上版本都會使用這里面的配置文件

?values-v14代表在API 14+的設(shè)備上,?其中API 14+代表android 4.0?+,4.0以上版本都會使用這里面的配置文件

?

?values-v19代表在API ?19+的設(shè)備上,其中API ?19+代表android 4.4 +?(可以設(shè)置沉浸模式等)

在sdk manager中可以看到目前為止的android sdk版本和api對應(yīng)的關(guān)系

26 -> android 8.0

25 -> android 7.1.1

24 -> android 7.0

23 -> android 6.0

22 -> android 5.1

21 -> android 5.0

20 -> android 4.4w

19 -> android 4.4

好,下來我們說一下沉浸式狀態(tài)欄:

第一種方式:通過設(shè)置Theme主題設(shè)置狀態(tài)欄透明(跟第五種方法幾乎相同,但在第五種方式做了簡單的擴展)

因為 API-21 之后(也就是 android 5.0 之后)的狀態(tài)欄,會默認(rèn)覆蓋一層半透明遮罩。且為了保持4.4以前系統(tǒng)正常使用,故需要三份 style 文件,即默認(rèn)的values(不設(shè)置狀態(tài)欄透明)、values-v19、values-v21(解決半透明遮罩問題)。

//valuse <style name="TranslucentTheme" parent="AppTheme"> </style>// values-v19。v19 開始有 android:windowTranslucentStatus 這個屬性 <style name="TranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:windowTranslucentStatus">true</item><item name="android:windowTranslucentNavigation">true</item> </style>

下面在style中設(shè)置屬性這種方法Android6.0和Android7.0都可以實現(xiàn)沉浸式狀態(tài)欄,經(jīng)測試后Android6.0和Android8.0幾乎是沒什么問題了

,但對于華為Android7.0來說,底部有個導(dǎo)航欄,鑲嵌在了頁面里,用戶體驗都不是很好,下面代碼設(shè)置是可以解決這個問題

// values-v21。5.0 以上提供了 setStatusBarColor() 方法設(shè)置狀態(tài)欄顏色。 <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:windowTranslucentStatus">false</item><item name="android:windowTranslucentNavigation">true</item><!--Android 5.x開始需要把顏色設(shè)置透明,否則導(dǎo)航欄會呈現(xiàn)系統(tǒng)默認(rèn)的淺灰色--><item name="android:statusBarColor">@android:color/transparent</item></style>

?

?

第二種方式:代碼設(shè)置狀態(tài)欄,這里面解決了避免狀態(tài)欄一些系統(tǒng)菜單和狀態(tài)欄顏色一樣的問題。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {Window window = this.getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {//設(shè)置狀態(tài)欄文字顏色及圖標(biāo)為淺色window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);//這個是將狀態(tài)欄文字顏色設(shè)置成深色 // window.getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {try {Class decorViewClazz = Class.forName("com.android.internal.policy.DecorView");Field field = decorViewClazz.getDeclaredField("mSemiTransparentStatusBarColor");field.setAccessible(true);field.setInt(window.getDecorView(), Color.TRANSPARENT); //改為透明} catch (ClassNotFoundException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (NoSuchFieldException e) {e.printStackTrace();}}window.setStatusBarColor(this.getResources().getColor(R.color.bg_color)); }

?

第三種方式:可以直接把style中的三個系統(tǒng)默認(rèn)顏色設(shè)置成跟主題幾乎一樣的顏色

第四種方式:兩行代碼直接實現(xiàn)

//無title requestWindowFeature(Window.FEATURE_NO_TITLE); //全屏 getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN , WindowManager.LayoutParams. FLAG_FULLSCREEN); //此兩段代碼必須設(shè)置在setContentView()方法之前

第五種方式:(本人最傾向于使用這種方法,經(jīng)多次測試,5.0以上都能實現(xiàn)沉浸式狀態(tài)欄效果)

在Value中的style中設(shè)置

<item name="android:statusBarColor">@android:color/transparent</item><!-- 如果需要導(dǎo)航欄也透明加下面這行代碼 --><!--<item name="android:navigationBarColor">@android:color/transparent</item>--><item name="android:windowTranslucentStatus">false</item><!-- 如果需要導(dǎo)航欄也透明加下面這行代碼 --><item name="android:windowTranslucentNavigation">true</item>

這里的話要注意一點:statusBarColor和windowTranslucentStatus是不能同時使用的,要不就把后者設(shè)置為false ,因為前者是設(shè)置狀態(tài)欄顏色,而后者是設(shè)置狀態(tài)欄半透明狀態(tài),效果是將內(nèi)容侵入到狀態(tài)欄之后,兩種效果相沖突,如果兩個屬性都設(shè)置的話,出來的效果就是狀態(tài)欄帶一個保護色;

還有一點呢,我們在開發(fā)的時候經(jīng)常會遇到狀態(tài)欄式淺色的,狀態(tài)欄上面的文字也是淺色,用戶體驗及其不好,怎么設(shè)置狀態(tài)欄文字顏色為深色或者淺色呢。這個的話在setContentView();方法后加上如下代碼就OJBK了

//設(shè)置狀態(tài)欄文字顏色及圖標(biāo)為淺色getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);//這個是將狀態(tài)欄文字顏色設(shè)置成深色 getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

第六種方式呢:(是不是感覺好驚訝,我也有點驚呀,沉浸式狀態(tài)欄竟然有這么多設(shè)置方法,并且還有第三方庫,驚呆了!)

我也是偶然看到一篇博客才發(fā)現(xiàn)的,這里給大家推薦一個比較好用的設(shè)置沉浸式狀態(tài)欄的第三方庫ImmersionBar:
github地址:https://github.com/gyf-dev/ImmersionBar

具體的用法呢,我感覺那位博主寫的比較詳細,推薦大家去他的博客里看一下:

https://blog.csdn.net/cjm2484836553/article/details/78420172

?

在這里我給大家提供一些常用的Theme主題

窗口主題設(shè)置:(這里主要對于Activity設(shè)置,用到系統(tǒng)自動主題內(nèi)容) ?android:theme=”@android:style/Theme.Dialog” 將一個Activity顯示為能話框模式 ?android:theme=”@android:style/Theme.NoTitleBar” 不顯示應(yīng)用程序標(biāo)題欄 ?android:theme=”@android:style/Theme.NoTitleBar.Fullscreen” 不顯示應(yīng)用程序標(biāo)題欄,并全屏 ?android:theme=”Theme.Light” 背景為白色 ?android:theme=”Theme.Light.NoTitleBar” 白色背景并無標(biāo)題欄 ?android:theme=”Theme.Light.NoTitleBar.Fullscreen” 白色背景,無標(biāo)題欄,全屏 ?android:theme=”Theme.Black” 背景黑色 ?android:theme=”Theme.Black.NoTitleBar” 黑色背景并無標(biāo)題欄 ?android:theme=”Theme.Black.NoTitleBar.Fullscreen” 黑色背景,無標(biāo)題欄,全屏 ?android:theme=”Theme.Wallpaper” 用系統(tǒng)桌面為應(yīng)用程序背景 ?android:theme=”Theme.Wallpaper.NoTitleBar” 用系統(tǒng)桌面為應(yīng)用程序背景,且無標(biāo)題欄 ?android:theme=”Theme.Wallpaper.NoTitleBar.Fullscreen” 用系統(tǒng)桌面為應(yīng)用程序背景,無標(biāo)題欄,全屏 ?android:theme=”Translucent” 半透明 ?android:theme=”Theme.Translucent.NoTitleBar” 半透明無標(biāo)題欄 ?android:theme=”Theme.Translucent.NoTitleBar.Fullscreen” 半透明無標(biāo)題欄充滿全屏 ?android:theme=”Theme.Panel” 平板風(fēng)格 ?android:theme=”Theme.Light.Panel”白色背景平板風(fēng)格

May everyone be happy every day and everything go well!


?

?

?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的沉浸式状态栏的实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。