Android開發(fā)中,經(jīng)常需要實(shí)現(xiàn)下圖狀態(tài)欄的效果,類似于沉浸式狀態(tài)欄,但這里僅僅是討論設(shè)置狀態(tài)欄的顏色和狀態(tài)欄上面文字、圖標(biāo)的顏色的方法。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了西平免費(fèi)建站歡迎大家使用!
Android 4.4(API 19)之后,就提供了修改狀態(tài)欄顏色的方法,但是在 Android 6.0(API 23)之后,才支持修改狀態(tài)欄上面的文字和圖標(biāo)顏色,默認(rèn)是白色的。所以會導(dǎo)致一個問題,在 4.4 到 6.0 之間的系統(tǒng),狀態(tài)欄設(shè)置為淺色的話,狀態(tài)欄上面白色的文字和圖標(biāo)會看不清,像下面這樣:
有一些第三方的系統(tǒng)提供了設(shè)置狀態(tài)欄和狀態(tài)欄文字、圖標(biāo)顏色的方法,比如小米的MIUI和魅族的Flyme,所以考慮了下比較好的實(shí)現(xiàn)方式是:
當(dāng)然,這里面也會有坑,比如 MIUI 提供的修改狀態(tài)欄字體顏色方法會跟 Android 系統(tǒng)自帶的方法沖突,官方說明如下: 關(guān)于MIUI狀態(tài)欄字符顏色邏輯調(diào)整說明
經(jīng)過網(wǎng)上的資料和自己的嘗試,MIUI 系統(tǒng)還是同時使用 MIUI 提供的方法和 Android 系統(tǒng)自帶的方法來修改狀態(tài)欄字體顏色比較保險。
基于上面的思考,封裝了設(shè)置 Android 4.4 以上系統(tǒng)狀態(tài)欄顏色和狀態(tài)欄字體、圖標(biāo)顏色的方法:
要在 Application Theme 加上 item name="android:fitsSystemWindows"true/item ,不然頁面會頂?shù)綘顟B(tài)欄上面,或者在 Activity 的布局里面加上 android:fitsSystemWindows="true" 和 android:clipToPadding="false" 也可以。
最終實(shí)現(xiàn)的效果如下:
大家有更好的方案可以告訴我~
由于產(chǎn)品需求 , 要將一級頁面的5個Fragment設(shè)置不一樣顏色的狀態(tài)欄; 然后我對著網(wǎng)上的博文抄了一遍 ,發(fā)現(xiàn)兼容問題很差 , 要么就是頂部的狀態(tài)欄沒有實(shí)現(xiàn)全屏 , 要么就是底部的虛擬按鈕遮擋導(dǎo)航欄(華為手機(jī)和小米手機(jī)), 最后自定義主題和設(shè)置xml布局頂部高度來解決了這個問題;
解決方案:
第一步.在values的styles中自定義主題:
第二步.創(chuàng)建values-v19文件夾和styles.xml:
第三步.創(chuàng)建values-v21文件夾和styles.xml:
第三步.引用主題:
第四步.Fragment 狀態(tài)欄填充顏色:(如果一節(jié)界面的頭部是輪播圖直接預(yù)留20dp的高度)
不設(shè)置預(yù)留高度,狀態(tài)欄會和toolbar疊加在一起 (狀態(tài)欄在toolbar上方)
運(yùn)行后效果圖如下:
輪播圖在頂部的時候直接預(yù)留狀態(tài)欄的高度即可:
指定顏色的界面設(shè)置多一層有顏色的View:
首先創(chuàng)建一個空項目,如下圖
可以看到狀態(tài)欄是白字黑背景, 導(dǎo)航欄也是白圖標(biāo)黑背景
嘿嘿, 我們先把狀態(tài)欄隱藏掉,在添加一個ImageView, 讓ImageView做背景(方便查看)
樣子如下:
將狀態(tài)欄和導(dǎo)航欄設(shè)置透明, 找到 Manifest.xml 文件, 在主題樣式中修改
android:statusBarColor 設(shè)置狀態(tài)欄背景色
android:navigationBarColor 同上
android:windowLightStatusBar 設(shè)置狀態(tài)欄文字色, true為深色, false為白色
android:windowLightNavigationBar 同上
android:windowTranslucentStatus 設(shè)置狀態(tài)欄半透明狀態(tài), true為半透明, false為不透明
android:windowTranslucentNavigation 同上
最后兩個半透明狀態(tài)下面沒用, 可自己嘗試看效果
效果圖如下:
可以看到導(dǎo)航欄與狀態(tài)欄并沒有透明,原因是默認(rèn)不能占用狀態(tài)欄空間與導(dǎo)航欄空間,根布局背景為白色,所有這里顯示白色
可以通過設(shè)置 getWindow().getDecorView().setSystemUiVisibility() 來適配
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 適配狀態(tài)欄空間
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 適配導(dǎo)航欄空間
效果如下:
Activity activity = getActivity();
Window window = activity ==null ?null : activity.getWindow();
if (window !=null Build.VERSION.SDK_INT = Build.VERSION_CODES.M) {
window.setStatusBarColor(getResources().getColor(R.color.statusbarcolor, null));
int visibility = window.getDecorView().getSystemUiVisibility();
visibility = visibility|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
window.getDecorView().setSystemUiVisibility(visibility);
}
設(shè)置狀態(tài)欄為沉浸式模式
Window window = getWindow();
if (window !=null) {
if (Build.VERSION.SDK_INT = Build.VERSION_CODES.M) {? ? ?window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
window.setStatusBarColor(Color.TRANSPARENT); }
}
設(shè)置狀態(tài)欄為非沉浸式模式并設(shè)置顏色
Window window = getWindow();
if (window !=null) {
if (Build.VERSION.SDK_INT = Build.VERSION_CODES.M) {
window.setStatusBarColor(getResources().getColor(R.color.status_color));
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
參考如下內(nèi)容:
android4.4 以下修改狀態(tài)欄顏色的方法為:
1、首先會懂得反編譯,電腦上要安裝java環(huán)境和反編譯工具。沒有的百度搜索下載安裝。這里就不多說了。
2、要準(zhǔn)備一個framework-res.apk放在一邊待用,把framework-res.apk復(fù)制到反編譯工具里、反編譯framework-res.apk后打開res\values\styles.xml。
3、直接搜索以下代碼
style name="TextAppearance.StatusBar" parent="@style/TextAppearance"
你會看見style name="TextAppearance.StatusBar" parent="@style/TextAppearance"
item name="textSize"14.0sp/item
item name="textStyle"normal/item
item name="textColor"?textColorPrimary/item
/style 然后修改這一段代碼item name="textColor"?textColorPrimary/item 為 item name="textColor"#ff000000/item
000000為顏色代碼 想要什么顏色就修改成自己喜歡的顏色就可以了 顏色對照表可以參考
4、然后回編譯?;鼐幾g完成后用電腦上的壓縮軟件打開回編譯好的framework-res.apk,拖出里面的resources.arsc替換進(jìn)事先準(zhǔn)備好的framework-res.apk里就可以了。然后用復(fù)制到內(nèi)存卡 用RE復(fù)制或者移動到system里 修改權(quán)限 3 1 0,在移動到framework里覆蓋就可以了。關(guān)機(jī)重啟,狀態(tài)欄的通知內(nèi)容顏色也變了。
先看一下默認(rèn)的情況:
藍(lán)色一行是自定義的導(dǎo)航欄,
黑色的是自帶的 ActionBar ,也就是我們說的標(biāo)題欄。
首先一般都會選擇去掉 ActionBar:
隱藏 actionbar 有很多種方法
這種方法是全局中隱藏了標(biāo)題欄。
其實(shí)在我的手機(jī)更新系統(tǒng)之前,隱藏了 ActionBar 后,狀態(tài)欄和自定義的導(dǎo)航欄顏色是相匹配的,不知道什么原因現(xiàn)在默認(rèn)為灰色了。
上面使用的主題雖然隱藏了標(biāo)題欄,但是和我們自定義的導(dǎo)航欄不搭,
這時候我們可以選擇用自定義的主題(Theme),來改變狀態(tài)欄:
在 values 下的 style.xml 中添加
或者在 onCreate 中:
上面兩行一般不一起設(shè)置,二選一即可。
第一行設(shè)置導(dǎo)航欄為透明,第二行將導(dǎo)航欄隱藏。
不推薦第二種做法,如果一個 Activity 中設(shè)置了隱藏導(dǎo)航欄而另一個 Activity 沒有,那兩者切換的時候會不好看。
融合的效果:
狀態(tài)欄和 app 頂部相融合了,如果標(biāo)題欄是一張圖片效果會更好。
這里還有一個問題,狀態(tài)欄的文字和我們導(dǎo)航欄的文字重疊了,
我們可以選擇在布局文件的根元素中添加:
讓布局為狀態(tài)欄留出空間,就不會出現(xiàn)上面這張被狀態(tài)欄遮擋的情況。
如果像上面的例子是一樣的純色的標(biāo)題欄,我們可以選擇直接改變狀態(tài)欄的顏色解決問題。
或者:
不顯示時間、電量等信息和文字:
同要可以用修改 Theme 來實(shí)現(xiàn):
或者在 OnCreat() 中加入,還是要注意加在 setContentView() 的前面
如果想讓圖片全屏要注意設(shè)置為:
當(dāng)前標(biāo)題:android設(shè)置狀態(tài)欄顏色,android 狀態(tài)欄文字顏色
轉(zhuǎn)載源于:http://jinyejixie.com/article16/hojedg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計公司、網(wǎng)站設(shè)計、虛擬主機(jī)、小程序開發(fā)、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)