『壹』 android狀態欄著色(非沉浸式狀態欄)
由於產品需求 , 要將一級頁面的5個Fragment設置不一樣顏色的狀態欄; 然後我對著網上的博文抄了一遍 ,發現兼容問題很差 , 要麼就是頂部的狀態欄沒有實現全屏 , 要麼就是底部的虛擬按鈕遮擋導航欄(華為手機和小米手機), 最後自定義主題和設置xml布局頂部高度來解決了這個問題;
解決方案:
第一步.在values的styles中自定義主題:
第二步.創建values-v19文件夾和styles.xml:
第三步.創建values-v21文件夾和styles.xml:
第三步.引用主題:
第四步.Fragment 狀態欄填充顏色:(如果一節界面的頭部是輪播圖直接預留20dp的高度)
不設置預留高度,狀態欄會和toolbar疊加在一起 (狀態欄在toolbar上方)
運行後效果圖如下:
輪播圖在頂部的時候直接預留狀態欄的高度即可:
指定顏色的界面設置多一層有顏色的View:
『貳』 安卓修改狀態欄字體顏色
android4.4 以下修改狀態欄顏色的方法為:
1、首先會懂得反編譯,電腦上要安裝java環境和反編譯工具。沒有的網路搜索下載安裝。這里就不多說了。
2、要准備一個framework-res.apk放在一邊待用,把framework-res.apk復制到反編譯工具里、反編譯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為顏色代碼 想要什麼顏色就修改成自己喜歡的顏色就可以了 顏色對照表可以參考 http://www.59178.com/tools/sejie.asp
4、然後回編譯。回編譯完成後用電腦上的壓縮軟體打開回編譯好的framework-res.apk,拖出裡面的resources.arsc替換進事先准備好的framework-res.apk里就可以了。然後用復制到內存卡 用RE復制或者移動到system里 修改許可權 3 1 0,在移動到framework里覆蓋就可以了。關機重啟,狀態欄的通知內容顏色也變了。
『叄』 Android設置狀態欄顏色和狀態欄文字、圖標顏色
Android開發中,經常需要實現下圖狀態欄的效果,類似於沉浸式狀態欄,但這里僅僅是討論設置狀態欄的顏色和狀態欄上面文字、圖標的顏色的方法。
Android 4.4(API 19)之後,就提供了修改狀態欄顏色的方法,但是在 Android 6.0(API 23)之後,才支持修改狀態欄上面的文字和圖標顏色,默認是白色的。所以會導致一個問題,在 4.4 到 6.0 之間的系統,狀態欄設置為淺色的話,狀態欄上面白色的文字和圖標會看不清,像下面這樣:
有一些第三方的系統提供了設置狀態欄和狀態欄文字、圖標顏色的方法,比如小米的MIUI和魅族的Flyme,所以考慮了下比較好的實現方式是:
當然,這裡面也會有坑,比如 MIUI 提供的修改狀態欄字體顏色方法會跟 Android 系統自帶的方法沖突,官方說明如下: 關於MIUI狀態欄字元顏色邏輯調整說明
經過網上的資料和自己的嘗試,MIUI 系統還是同時使用 MIUI 提供的方法和 Android 系統自帶的方法來修改狀態欄字體顏色比較保險。
基於上面的思考,封裝了設置 Android 4.4 以上系統狀態欄顏色和狀態欄字體、圖標顏色的方法:
要在 Application Theme 加上 <item name="android:fitsSystemWindows">true</item> ,不然頁面會頂到狀態欄上面,或者在 Activity 的布局裡面加上 android:fitsSystemWindows="true" 和 android:clipToPadding="false" 也可以。
最終實現的效果如下:
大家有更好的方案可以告訴我~
『肆』 Android 如何設置狀態欄顏色和標題欄顏色一致
三星手機狀態欄顏色無法手動更改,部分機型由於將系統升級至安卓4.4版本。該系統狀態欄上的圖標(電池等)顏色更改為白色,該情況為正常現象,無法修改。
『伍』 Android沉浸式狀態欄 如何改變狀態圖標和文字的顏色
在Android4.4設備上支持沉浸式狀態欄,只需要添加values-v19/styles.xml 下添加
?
1
2
<code class="language-xml hljs "><style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" type="text/css"><item name="android:windowTranslucentNavigation">false</item>
<item name="android:windowTranslucentStatus">true</item></style></code>
然後在可以擴展的控制項添加屬性android:fitsSystemWindows="true"
就闊以了。
但在MIUI V6下如果擴展的顏色比較淺,會導致狀態欄的文字無法看清。在其他ROM上會有漸變的灰色區域。
MIUI提供了新的解決方案,在MIUI V6上狀態欄支持灰黑色和白色兩種字體顏色,開發者可以直接設置當前界面狀態欄的文字顏色。
具體代碼:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<code class="language-java hljs ">/**
* 只支持MIUI V6
* @param context
* @param type 0--只需要狀態欄透明 1-狀態欄透明且黑色字體 2-清除黑色字體
*/
public static void setStatusBarTextColor(Activity context,int type){
if (!isMiUIV6()){
DebugLog.d("isMiUIV6:"+false);
return;
}
DebugLog.d("isMiUIV6:"+true);
Window window = context.getWindow();
Class clazz = window.getClass();
try {
int tranceFlag = 0;
int darkModeFlag = 0;
Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_TRANSPARENT");
tranceFlag = field.getInt(layoutParams);
field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
darkModeFlag = field.getInt(layoutParams);
Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
if (type == 0){
extraFlagField.invoke(window, tranceFlag, tranceFlag);//只需要狀態欄透明
}else if(type == 1){
extraFlagField.invoke(window, tranceFlag | darkModeFlag, tranceFlag | darkModeFlag);//狀態欄透明且黑色字體
}else {
extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字體
}
}catch (Exception e){
}
}
private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name";
private static boolean isMiUIV6() {
try {
final BuildProperties prop = BuildProperties.newInstance();
String name = prop.getProperty(KEY_MIUI_VERSION_NAME, "");
if ("V6".equals(name)){
return true;
}else {
return false;
}
// return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null
// || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null
// || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null;
} catch (final IOException e) {
return false;
}
}</code>
『陸』 android沉浸式狀態欄都是白色怎麼實現
在style文件里修改colorprimary的顏色就行了,不過要api21以上才能使用
『柒』 Android如何設置頂部狀態欄顏色(主題)
在Android中我們經常需要設置屏幕頂部狀態欄的主題和應用頁面保持同一風格,本文介紹幾種常用的設置方案:
首先給出一張圖:
2 2通過上圖,我們可以通過設置不同的屬性來達到控制不同位置顏色的目的,下面給出使用示例,修改res/values-19裡面的內容:
主要是設置 colorPrimary,colorPrimaryDark這兩個屬性的值來設置狀態欄的顏色,需要注意的是:
1:AndroidManifest.xml文件中的targetSdkVersion必須設置在 21 以上。
2.parent主題必須是 Theme.AppCompat 開頭,兼容包下的主題,所以必須一用 v7 包。
在頂部標題欄設置屬性值達到風格一致的目的
首先修改res/values-v19文件夾下的styles.xml文件內容如下(如果沒有可以新建一個):
然後設置頂部標題控制項的兩個屬性:
這時狀態欄會保持與設置fitsSystemWindow屬性的控制項的背景顏色一致。