❶ android 狀態欄透明
前言:最近項目大量用到狀態欄透明,網上也出現很多庫可以直接拿來用,個人認為沒有必要那麼重引用到一個庫(有木有同學和我有一樣的想法),所以研究了一番,在此做個記錄加強記憶也便後期查閱,如果無意中有幸能幫助到你那就再好不過了。
Android 從 4.4 (SDK 19) 開始支持 系統欄(狀態欄+導航欄)半透明 效果:
翻譯一下就是:
TranslucentDecor 主題設置了兩個屬性 windowTranslucentStatus 和 windowTranslucentNavigation 都為 true,前者指定狀態欄半透明、後者指定導航欄半透明。
本文只探討「狀態欄」 。
默認樣式是這樣:
可見 Toolbar 和系統狀態欄之間有明顯的分界,我們要實現的效果是 Toolbar 和狀態欄背景統一,看起來像是一個整體(自行腦補圖片)。
按照官方文檔,我們自定義主題:
對應的 Activity 引用該主題:
我看來看看效果:
雖然實現了半透明,但是布局被狀態欄覆蓋,接下來在布局文件中設置 fitSystemWindows (注意加到根節點 ConstraintLayout 上):
來看看效果:
雖然布局沒有被狀態欄覆蓋,但是狀態欄背景顯然這不是我們想要的效果😭
為什麼狀態欄會這么奇怪?
文章開頭的定義中我們說了,布局文件會延伸到狀態欄所佔區域下, fitsSystemWindows 的作用是給對應的 View 增加 padding(這里以 ConstraintLayout 為例),目的是為了讓其內容不被狀態欄遮擋。
在我們的布局文件中 ConstraintLayout 沒有設置背景(默認白色),所以狀態欄默認的半透明背景色和 ConstraintLayout 的白色背景疊加,就變成了上圖中的效果。
【總結】兩個基本概念:
1、 windowTranslucentStatus 設置為true之後,狀態欄默認是 半透明 的(4.4 是黑色到透明色漸變,5.0+ 是純黑色半透明),和我們要求的 透明 相去甚遠。更重要的是,布局會延伸到狀態欄底下。
2、 android:fitsSystemWindows 簡單理解 就是 View 為了適配系統狀態欄和導航欄(不被遮擋)自動 增加 padding ,當然真正的實現原理比這復雜很多而且不同的 View 可以自定義實現方式。
所以,為了實現文章開頭提出來的「狀態欄透明」效果,我們需要處理:
設置 windowTranslucentStatus 為 true,讓狀態欄半透明。
在根節點設置 android:fitsSystemWindows 使其不被狀態欄遮擋。
Android 4.4 暫時沒有辦法去掉狀態欄的漸變。
Android 5.0+ 開始支持修改狀態欄顏色,設置透明色即可把半透明去掉。
看看效果:
我們看到即使狀態欄透明了,但是其底色是一片白,因為跟節點 ConstraintLayout 沒有設置背景,大多情況下我們不會給整個跟節點設置顏色,可以考慮把 android:fitsSystemWindows 設置到子 View 上,本例中是 AppBarLayout (5.0+ 無效,只能顯式給 AppBarLayout 加 padding,可以利用其背景色),實際項目中可靈活調整。
最終效果:
至此,完成狀態欄透明效果,網上有很多庫,實際上都是基於此原理,在此基礎上再自定義 View 做為狀態欄背景。
https://developer.android.com/about/versions/android-4.4.html
❷ android怎麼修改狀態欄的顏色
getWindow().setStatusBarColor(Color.TRANSPARENT); // 透明
getWindow().setStatusBarColor(Color.BLACK); // 黑色
getWindow().setStatusBarColor(Color.YELLOW); // 黃色
...
...
❸ android 怎麼設置狀態欄字體顏色
通過Style來修改狀態欄顏色。
1.設置 colorPrimary,colorPrimaryDark兩個顏色。
<stylename="AppTheme"parent="Theme.AppCompat.Light.NoActionBar">
<itemname="colorPrimary">@android:color/holo_blue_bright</item>
<itemname="colorPrimaryDark">@android:color/holo_blue_bright</item>
</style>
2. AndroidManifest.xml文件中的targetSdkVersion必須設置在21以上。
3.parent主題必須是Theme.AppCompat開頭,兼容包下的主題,所以必須一用v7包。
colorPrimary,colorPrimaryDark這兩個屬性是Material Design風格中規定的。具體位置如下圖所示:
❹ android導航欄與狀態欄顏色及透明度
首先創建一個空項目,如下圖
可以看到狀態欄是白字黑背景, 導航欄也是白圖標黑背景
嘿嘿, 我們先把狀態欄隱藏掉,在添加一個ImageView, 讓ImageView做背景(方便查看)
樣子如下:
將狀態欄和導航欄設置透明, 找到 Manifest.xml 文件, 在主題樣式中修改
android:statusBarColor 設置狀態欄背景色
android:navigationBarColor 同上
android:windowLightStatusBar 設置狀態欄文字色, true為深色, false為白色
android:windowLightNavigationBar 同上
android:windowTranslucentStatus 設置狀態欄半透明狀態, true為半透明, false為不透明
android:windowTranslucentNavigation 同上
最後兩個半透明狀態下面沒用, 可自己嘗試看效果
效果圖如下:
可以看到導航欄與狀態欄並沒有透明,原因是默認不能佔用狀態欄空間與導航欄空間,根布局背景為白色,所有這里顯示白色
可以通過設置 getWindow().getDecorView().setSystemUiVisibility() 來適配
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 適配狀態欄空間
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 適配導航欄空間
效果如下:
❺ android怎麼設置狀態欄和actionbar同顏色
我今天下午才搞了這東西,也查了好多資料。
首先狀態欄顏色是可以設置的,但你不可能每個界面的頭部都一個顏色,每次都去修改頭部顏色比較麻煩,比較簡單的方法就是讓狀態欄透明,然後你就會發現所有的頭部都定到狀態欄上了,接下來給頭部一個PaddingTop就好了,但狀態欄透明只有手機API大於21才有用,所以判斷一下大於21再用,不大於就不弄透明了。
關鍵代碼:
java">BaseActivity
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.LOLLIPOP){
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//這就是透明
}
//透明之後所有的頭部都會頂上來,然後就是加paddingtop了
//頭部layout公用,rl_title_content是最外層的RelativeLayout。
RelativeLayoutrl_title_content=findViewById(R.id.rl_title_content);
if(rl_title_content!=null){
//getStatusBarHeight是獲取狀態欄的高度的
rl_title_content.setPadding(0,Utils.getStatusBarHeight(this),0,0);//左上右下
}
(Contextcontext){
Class<?>c=null;
Objectobj=null;
Fieldfield=null;
intx=0,sbar=0;
try{
c=Class.forName("com.android.internal.R$dimen");
obj=c.newInstance();
field=c.getField("status_bar_height");
x=Integer.parseInt(field.get(obj).toString());
sbar=context.getResources().getDimensionPixelSize(x);
}catch(Exceptione1){
e1.printStackTrace();
}
returnsbar;
}
大概就是這樣,有什麼問題繼續問我。
❻ android怎麼改變狀態欄顏色
參考如下內容:
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狀態欄顏色修改
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);
}
設置狀態欄為沉浸式模式
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); }
}
設置狀態欄為非沉浸式模式並設置顏色
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);
}
}
❽ 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屬性的控制項的背景顏色一致。
❾ Android狀態欄著色(非沉浸式狀態欄)
由於產品需求 , 要將一級頁面的5個Fragment設置不一樣顏色的狀態欄; 然後我對著網上的博文抄了一遍 ,發現兼容問題很差 , 要麼就是頂部的狀態欄沒有實現全屏 , 要麼就是底部的虛擬按鈕遮擋導航欄(華為手機和小米手機), 最後自定義主題和設置xml布局頂部高度來解決了這個問題;
解決方案:
第一步.在values的styles中自定義主題:
第二步.創建values-v19文件夾和styles.xml:
第三步.創建values-v21文件夾和styles.xml:
第三步.引用主題:
第四步.Fragment 狀態欄填充顏色:(如果一節界面的頭部是輪播圖直接預留20dp的高度)
不設置預留高度,狀態欄會和toolbar疊加在一起 (狀態欄在toolbar上方)
運行後效果圖如下:
輪播圖在頂部的時候直接預留狀態欄的高度即可:
指定顏色的界面設置多一層有顏色的View:
❿ 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" 也可以。
最終實現的效果如下:
大家有更好的方案可以告訴我~