Android沉浸式狀態列
阿新 • • 發佈:2018-12-12
之前一直沒怎麼去研究這方面的,最近有個專案,讓我在沉浸式裡面真的沉浸死了,雖然學習了很多,但是還是個沉浸式菜鳥,這裡也就記錄一些遇到的問題和分享下相關經驗吧
需求:
這裡是一個側滑頁面和主頁面,這個佈局必須是佔滿全屏的
另外一種 需要實現這樣的效果,也就是不會頂上去的
實現:
<style name="MyFullScreenTheme" parent="@style/Theme.AppCompat.Light.NoActionBar"> <item name="android:windowTranslucentStatus" tools:targetApi="kitkat">true</item> <item name="android:statusBarColor" tools:targetApi="lollipop">@android:color/transparent</item> <item name="android:windowTranslucentNavigation" tools:targetApi="kitkat">true</item> </style>
直接定義一個這樣的主題,activity加入這個主題可以實現第一種需求
至於第二種,當然也可以這樣做,但是必須要加個屬性android:fitsSystemWindows="true"
這個的意思就是佈局在狀態列下面
接下來我用了一個githup上面的
implementation 'com.gyf.barlibrary:barlibrary:2.3.0'//沉浸式狀態列和沉浸式導航欄管理
這個用法也簡單,在baseactivity裡面新增以下
/** * 新增這個則會點選edittext的時候講佈局頂上去 * 同時如果edittext的焦點不會被遮擋 * */ private ImmersionBar mImmersionBar; public void setStatusBar() { mImmersionBar = ImmersionBar.with(this); mImmersionBar.statusBarColor(R.color.white) //原理:如果當前裝置支援狀態列字型變色,會設定狀態列字型為黑色,如果當前裝置不支援狀態列字型變色,會使當前狀態列加上透明度,否則不執行透明度 .statusBarDarkFont(true, 0.2f) //使用該屬性必須指定狀態列的顏色,不然狀態列透明,很難看 .fitsSystemWindows(true) //所有子類都將繼承這些相同的屬性 .init(); }
這樣的話所有繼承了baseactivity的activity都會實現第二種需求,但是又有其他不一樣的,例如需求一那種,這個時候就在需要實現的位置單獨新增一種狀態
private ImmersionBar mImmersionBar; public void setStatusBar() { mImmersionBar = ImmersionBar.with(this); mImmersionBar.statusBarColor(R.color.transparent) //原理:如果當前裝置支援狀態列字型變色,會設定狀態列字型為黑色,如果當前裝置不支援狀態列字型變色,會使當前狀態列加上透明度,否則不執行透明度 .statusBarDarkFont(true, 0.2f) //使用該屬性必須指定狀態列的顏色,不然狀態列透明,很難看 .fitsSystemWindows(false) //所有子類都將繼承這些相同的屬性 .init(); }
這樣就都實現了。如有疑問請留言