1. 程式人生 > >Android4.4、Android5.0+狀態列顏色、透明等設定

Android4.4、Android5.0+狀態列顏色、透明等設定


Android 4.4

Manifest檔案Activity的Theme設定:

[html] view plain copy  print?
  1. <stylename="theme_main"parent="android:Theme">
  2.         <!-- 隱藏系統標題欄 -->
  3.         <itemname="android:windowNoTitle">true</item>
  4.         <!-- 透明標題欄 -->
  5.         <itemname="android:windowTranslucentStatus"
    >true</item>
  6.     </style>

程式碼中設定:

[java] view plain copy  print?
  1. if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
  2.             Window window = getWindow();  
  3.             window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
  4.         }  

以上設定都是讓狀態列透明,讓頁面佈局從狀態列開始,如果想改變狀態列顏色需要在頁面佈局的最外層加入

android:fitsSystemWindows="true"

或者是在程式碼里加入

[java] view plain copy  print?
  1. <span style="font-size:14px;">if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
  2.             Window window = getWindow();  
  3.             window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
  4.             //set child View not fill the system window
  5.             ViewGroup mContentView = (ViewGroup) findViewById(Window.ID_ANDROID_CONTENT);  
  6.             View mChildView = mContentView.getChildAt(0);  
  7.             if (mChildView != null) {  
  8.                 ViewCompat.setFitsSystemWindows(mChildView, true);  
  9.             }  
  10.         }</span>  

注:必須是在setContentView()以後執行

狀態列的顏色以最外層佈局的背景色為準。


Android 5.0+

1.在Manifest檔案中配置Activity的theme,設定狀態列顏色,主題顏色等。



[html] view plain copy  print?
  1. <stylename="AppBaseTheme"parent="android:ThemeOverlay.Material.Dark.ActionBar">
  2.         <!-- 隱藏系統標題欄 -->
  3.         <itemname="android:windowNoTitle">true</item>
  4.         <!-- Main theme colors -->
  5.         <!-- App主題顏色(滑動陰影等)   your app's branding color (for the app bar)-->
  6.         <itemname="android:colorPrimary">#FF6600</item>
  7.         <!-- 狀態列顏色   darker variant of colorPrimary (for status bar, contextual app bars) -->
  8.         <itemname="android:colorPrimaryDark">#e86053</item>
  9.         <!-- 控制元件主題樣式(例如EditText,CheckBox,RadioButton等)  theme UI controls like checkboxes and text fields -->
  10.         <itemname="android:colorAccent">#BFDF0F</item>
  11.         <!-- 系統預設控制元件樣式 -->
  12.         <!-- 點選時顏色 -->
  13.         <!--<item name="android:colorControlHighlight">#0000FF</item>-->
  14.         <!-- 正常狀態下顏色 -->
  15.         <!--<item name="android:colorControlNormal">#FF0000</item>-->
  16.         <!-- 選中時顏色 -->
  17.         <!--<item name="android:colorControlActivated">#00FF00</item>-->
  18.     </style>

2.在程式碼中設定狀態列顏色

[java] view plain copy  print?
  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
  2.             Window window = getWindow();  
  3.             //After LOLLIPOP not translucent status bar
  4.             window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);  
  5.             //Then call setStatusBarColor.
  6.             window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  
  7.             window.setStatusBarColor(Color.BLUE);  
  8.         }  

3.設定狀態列透明(目前只找到在程式碼中設定)

[java] view plain copy  print?
  1. if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
  2.             Window window = getWindow();  
  3.             window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS  
  4.                     | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
  5.             window.getDecorView().setSystemUiVisibility(  
  6.                     View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN  
  7.                             | View.SYSTEM_UI_FLAG_LAYOUT_STABLE  
  8.             );  
  9.             window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  
  10.             window.setStatusBarColor(Color.TRANSPARENT);  
  11.         }  

  FLAG_TRANSLUCENT_STATUS //透明狀態列
  FLAG_TRANSLUCENT_NAVIGATION //透明導航欄
* setSystemUiVisibility這個方法引數表示的狀態比較多,具體如下:

    1. View.SYSTEM_UI_FLAG_VISIBLE:顯示狀態列,Activity不全屏顯示(恢復到有狀態的正常情況)。

    2. View.INVISIBLE:隱藏狀態列,同時Activity會伸展全屏顯示。

    3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏顯示,且狀態列被隱藏覆蓋掉。

    4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏顯示,但狀態列不會被隱藏覆蓋,狀態列依然可見,Activity頂端佈局部分會被狀態遮住。

    5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

    6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

    7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隱藏虛擬按鍵(導航欄)。有些手機會用虛擬按鍵來代替物理按鍵。

    8. View.SYSTEM_UI_FLAG_LOW_PROFILE:狀態列顯示處於低能顯示狀態(low profile模式),狀態列上一些圖示顯示會被隱藏。

* window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  Flag表明這個視窗負責繪製系統狀態列標題欄的背景。如果設定,系統bar繪製成透明背景,在這個視窗相應的地方會填充{@link Window#getStatusBarColor()}和       {@link Window#getNavigationBarColor()}對應的顏色。

虛擬按鍵相關設定

api >= 19 [html] view plain copy  print?
  1. <spanstyle="font-size:12px;"><itemname="android:windowTranslucentNavigation">true</item></span>
[java] view plain copy  print?
  1. if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
  2.             Window window = getWindow();  
  3.             window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
  4.         }  
虛擬按鍵底部有陰影 api >= 21
[java] view plain copy  print?
  1. if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {  
  2.             Window window = getWindow();  
  3.             window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
  4.             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {  
  5.                 window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);  
  6.                 window.getDecorView().setSystemUiVisibility(  
  7.                     View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION  
  8.                 );  
  9.                 window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  
  10.                 window.setNavigationBarColor(Color.TRANSPARENT);  
  11. //                window.setNavigationBarColor(Color.BLUE);
  12.             }  
  13.         }  
可以改變虛擬按鍵的背景色,沒有陰影(貌似在theme配置檔案裡好像改不了顏色)



更改狀態列字型顏色為深色(Android6.0 +)

[html] view plain copy  print?
  1. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  
  2.                getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);  
  3.            }  

相關推薦

Android4.4Android5.0+狀態顏色透明設定

Android 4.4 Manifest檔案Activity的Theme設定: [html] view plain copy  print? <stylename="theme_main"parent="android:Theme">    

android4.4以上沉浸式狀態和導航欄實現以及Bar的其他管理

自從android4.4開始,android手機狀態列再也不是一成黑的時代,之前叫做變色龍,miui6釋出會把他叫做沉浸式,之後大家就自然而然的接受了沉浸式這個名稱,其實實際應該叫做Translucent Bar,即為透明狀態列。   沉浸式實現原理其實是使整個activity佈局延伸到整個螢幕,然

android沉浸式狀態變色狀態透明狀態修改狀態顏色透明

首先我要區分清楚沉浸式狀態列與變色狀態列。 沉浸式狀態列指的是,狀態列隱藏,在手指做了相關操作後,狀態列顯示出來,例如視訊播放器,在播放視訊時是隱藏狀態列的,但是點選螢幕的時候,狀態列會顯示出來,再例如文字閱讀器,在閱讀的時候是全屏的,然後從螢幕上方下滑或者下

flutter 修改狀態顏色透明透明

// 以下兩行 設定android狀態列為透明的沉浸。寫在元件渲染之後,是為了在渲染後進行set賦值,覆蓋狀態列,寫在渲染之前MaterialApp元件會覆蓋掉這個值。 void main() { runApp(new MyApp()); SystemUiOverlayStyle systemUiO

android 狀態顏色的兩種設定模式

現在的很多app的狀態列的顏色A都設定的跟ActionBar顏色一樣,這樣看起來會比較舒服一些,也比較美觀,不會覺得上面禿了一塊,特別是強迫症患者。。 像圖片這樣。。看起來很不爽,所以就看看能不能設定成自己喜歡的顏色。然後就去搜一下關於這方面的知識,當然了,這方面的知識多

Android中 4.4-5.0 系統狀態顏色的修改。實現Translucent System Bar

在這裡我們使用一種簡單的方法,之前在網上也看過類似的實現方法,一種是直接在程式碼裡面去設定,還有一種直接修改主題的樣式,個人感覺後面一種比較方便,也容易理解,在這裡就介紹一下第二種方法。 首先要到AndroidManifest中為指定的Activity去設定Theme,不過我們不能在values/s

Android5.0沉浸式狀態,以及動態改變狀態顏色

設定狀態列完全不可見 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIn

Android實現修改狀態背景字型和圖示顏色的方法

前言: Android開發,對於狀態列的修改,實在是不友好,沒什麼api可以用,不像ios那麼方便.但是ui又喜歡只搞ios一套.沒辦法.各種翻原始碼,寫反射.真的蛋疼. 需求場景: 當toolbar及狀態列需要為白色或淺色時(如簡書),狀態列由於用的Light風格Theme,字型,

Qt android 設定系統狀態列為全透明,半透明全屏,設定狀態顏色,修改程式圖示

實現Qt平臺下,安卓系統狀態列的相關設定(全透明,半透明、全屏,設定狀態列顏色,修改程式圖示,網上文章大多數提供多種方法,但是講述的雲裡霧裡,沒有說清楚,以下是本人自己整理,希望大家相互交流學習) 實驗環境: Qt 5.12 程式語言:qml 和 c++ 執行平臺:android 正

狀態顏色顯示(字型背景)

ios上狀態列 就是指的最上面的20畫素高的部分 狀態列分前後兩部分,要分清這兩個概念,後面會用到: 前景部分:就是指的顯示電池、時間等部分; 背景部分:就是顯示黑色或者圖片的背景部分; 如下圖:前景部分為白色,背景部分為黑色 注意:這裡只涉及到ios7以

90setStatusBarStyle無效問題 修改狀態顏色 只有白色黑色可選UIStatusBarStyleLightContent

info.plist檔案中, View controller-based status bar appearance項設為YES,則View controller對status bar的設定優先順序

iOS9.0修改狀態顏色

1.將 View controller-based status bar appearance 刪除(預設為 YES),或設定為YES 2.設定rootViewcontroller,如果為viewController,那麼重寫下面的方法 -(UIStatu

nativescript修改android的狀態顏色

if (app.android && Platform.device.sdkVersion >= '21') { let window = app.android.startActivity.getWindow(); window.setStatusBarCo

iOS 更改狀態顏色和隱藏狀態

更改狀態列顏色 iOS7以後 狀態列的字型為黑色:UIStatusBarStyleDefault 狀態列的字型為白色:UIStatusBarStyleLightContent 解決方案 1、在info.plist中,將View controller-based status bar appea

Android中沉浸式狀態,改變狀態顏色類似QQ樣式

1、使用該功能需要使用到第三方庫SystemBarTint 下載地址:https://github.com/jgilfelt/SystemBarTint 2、需要在AndroidMainfest檔案中Application設定樣式 android:the

android狀態顏色與沉浸式適配

需求場景:設定狀態列顏色與設定沉浸式在同一個Activity互相切換 設定狀態列顏色 小米或魅族通過私有方法可以自己設定(4.4以上版本) /** * MIUI的沉浸支援透明白色字型和透明黑色字型 * https://dev.m

android設定狀態顏色為深色

public boolean setDeepStatusBar(boolean isChange,Activity mActivity) { if (!isChange){ return false; } if(Build.VERSI

移動開發---更改狀態顏色

private void setStatusBarColor(int color) { if (color == 0) return; if (Build.VERSION.SDK_INT >= 21) {

kotlin設定actionbar和狀態顏色一致

首先在mainfest檔案中設定主題: android:theme="@style/AppTheme 接下來去看看:這個主題繼承了theme.M。。。的樣式 下面item是自定義的會覆蓋父類樣式,

android狀態一體化沉浸式狀態(相容低版本)

<TextView            android:id="@+id/tv_title"            android:layout_centerVertical="true"            android:layout_width="match_parent"