Android5.0使用全透明狀態列
由於專案需求
實現全透明狀態列, 當透明欄是純色的時候,設定需求所需的顏色.
在適配5.0以上專案的時候的標題欄會出現一個半透明的陰影模式遮罩,效果很差. 雖然網上有程式碼是可以實現上部狀態列透明,但是結果下面的導航欄也透明瞭,雖然想過讀取導航欄高度的方式,但是有些手機沒有實體按鍵, 無奈之下只好摸索window的flag 終於找到以下解決辦法:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.0及以上,不設定透明狀態列,設定會有半透明陰影 Window window=activity.getWindow(); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); /* 這樣設定狀態列和導航欄都透明瞭 Window window = getWindow(); View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT);*/ } else { //。。。。 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); }
另外擴充套件下:
import android.app.Activity; import android.graphics.Color; import android.os.Build; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; /** * 狀態列的實現封裝類 * - 完成以下兩種功能: * 1,設定一個純色,適配4.4並以上,需要處理5.0並以上的陰影效果 * 2,當頂部是一個圖片,上移到狀態列 * */ public class StatusBarUtils { /** * 將acitivity中的activity中的狀態列設定為一個純色 * * @param activity 需要設定的activity * @param color 設定的顏色(一般是titlebar的顏色) */ public static void setColor(Activity activity, int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.0及以上,不設定透明狀態列,設定會有半透明陰影 activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //設定statusBar的背景色 activity.getWindow().setStatusBarColor(color); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // 生成一個狀態列大小的矩形 View statusView = createStatusBarView(activity, color); // 新增 statusView 到佈局中 ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); decorView.addView(statusView); //讓我們的activity_main。xml中的佈局適應螢幕 setRootView(activity); } } /** * 當頂部是圖片時,是圖片顯示到狀態列上 * * @param activity */ public static void setImage(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.0及以上,不設定透明狀態列,設定會有半透明陰影 Window window = activity.getWindow(); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); /* Window window = getWindow(); View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT);*/ } else { //。。。。 activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); } } /** * 設定根佈局引數,讓跟佈局引數適應透明狀態列 */ private static void setRootView(Activity activity) { //獲取到activity_main.xml檔案 ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0); //如果不是設定引數,會使內容顯示到狀態列上 rootView.setFitsSystemWindows(true); } /** * 獲取狀態列的高度 * * @param acitivity * @return */ private static int getStatusBarHeight(Activity acitivity) { int resourceId = acitivity.getResources().getIdentifier("status_bar_height", "dimen", "android"); return acitivity.getResources().getDimensionPixelOffset(resourceId); } /** * 生成一個和狀態列大小相同的矩形條 * * @param activity 需要設定的activity * @param color 狀態列顏色值 * @return 狀態列矩形條 */ private static View createStatusBarView(Activity activity, int color) { // 繪製一個和狀態列一樣高的矩形 View statusBarView = new View(activity); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity)); statusBarView.setLayoutParams(params); statusBarView.setBackgroundColor(color); return statusBarView; } }
使用 如果下部是一張圖片的時候 只需要使用
StatusBarUtils.setImage(this);
如果下部需要的是純色,只需要使用
StatusBarUtils.setColor(this,Color.parseColor("#4d000000"));
就行了.
相關推薦
Android5.0使用全透明狀態列
由於專案需求 實現全透明狀態列, 當透明欄是純色的時候,設定需求所需的顏色. 在適配5.0以上專案的時候的標題欄會出現一個半透明的陰影模式遮罩,效果很差. 雖然網上有程式碼是可以實現上部狀態列透明,但是結果下面的導航欄也透明瞭,雖然想過讀取導航欄高度的方式
Android5.0實現全透明狀態列效果
效果如圖: 實現程式碼如下: public class MainActivity extends Activity { @SuppressLint("InlinedApi")
Android全透明狀態列
在setContentView之前新增: override fun onCreate(savedInstanceState: Bundle?) { window.requestFeature(Window.FEATURE_NO_TITLE) if (Buil
Android5.0沉浸式狀態列,以及動態改變狀態列顏色
設定狀態列完全不可見 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIn
Android全透明狀態列效果
在onCreate方法中: getWindow().requestFeature(Window.FEATURE_NO_TITLE); if(VERSION.SDK_INT >
Android5.0 透明狀態列
實現上述效果的程式碼如下: [java] view plain copy print?publicclass MainActivity extends Activity { @SuppressLint(“InlinedApi”) @Override protectedvo
android介面UI美化:沉浸模式、全透明或半透明狀態列及導航欄的實現
android api19開始我們就能對頂部狀態列和底部導航欄進行半透明處理了,而api21開始則可以實現全透明狀態列與導航欄以及開啟沉浸模式,至於什麼是沉浸模式,大家百度一下應該就都知道了,有一點需要強調的是全透明不是沉浸模式,前者只是將狀態列、導航欄的背景設定為完全透明,而後者則是完全將狀態列與
Android上透明狀態列,全屏顯示以及沉浸模式
在Android上為了實現全屏顯示,透明狀態列,沉浸模式等效果,往往需要我們掌握和系統UI顯示隱藏相關的各種Flag。Android上API版本混亂,各種Flag林立。今天我們就來聊聊這些Flags。 在Android Kitkat中引入Immersive Mode
Qt for ios / Qt for Android 設定透明狀態列
前言 所謂的透明狀態列,有些人也稱之為沉浸式標題欄,就是要讓系統的通知欄也顯示出來,這樣整體看上起會非常美觀,目前用到的所有軟體幾乎都是這種風格,如果是用原生開發的話其實是非常容易的,但是如果是跨平臺開發,比如 Qt 來開發 android 或者 ios,那就有點難搞了,Qt 並沒有
【實戰乾貨】透明狀態列和導航欄的終極解決方案
本文主要分享了透明狀態列和導航欄的終極解決方案。以後這類問題,一文搞定 這個技術痛點遇到過的都懂~本文幫你徹底解決這個痛點~還不快收藏 背景 在我做 Android 開發之前,我就發現有些 App 的狀態列和導航欄有透明效果,或者是沉浸式效果,比如說酷
Android 透明狀態列瞭解使用 及SystemBarTint 解讀
正確區分 沉浸式全屏 和透明狀態列 沉浸式全屏模式:隱藏status bar(狀態列)使螢幕全屏,讓Activity接收所有的(整個螢幕的)觸控事件。 透明化系統狀態列:透明化系統狀態列,使得佈局侵入系統欄的後面,必須啟用fitsSystemWindows屬性來調整佈局才不至於被系統欄覆蓋。
android 適配華為透明狀態列 ,保留虛擬導航鍵,設定狀態列透明,且設定狀態列文字顏色為黑色
設定後狀態列不遮擋底部contentview裡的內容,但是狀態列上的圖示文字顏色和我的主題色白色混在一起了 public static void setTranslucentKeepVirtualNav(Activity activity) { if (Build.VERSIO
透明狀態列或沉浸式狀態在MIUI系統下,更改系統狀態列字型顏色的方法
這個修改方法是小米開發者論壇提供的,原文連結:http://dev.xiaomi.com/docs/appsmarket/technical_docs/immersion/ MIUI 6 沉浸式狀態列呼叫方法 看著iOS美膩膩的沉浸,看著MIUI 6 美膩膩的系統App沉浸,看著自己黑不溜秋的狀態列!強迫症
Android 抽屜側滑風格+透明狀態列(純色)
Android 抽屜側滑風格+沉浸式狀態列(類似網易雲音樂狀態列為純色) 一.抽屜風格側滑 Toolbar+DrawerLayout+NavigationView 在andorid studio中new -Module-Navigation Drawe
Android透明狀態列的實現
Android 4.4 (API 19)開始支援透明狀態列,可以在配置activity的theme或者在程式碼中開啟透明狀態列。 Android根據系統版本呼叫不同資原始檔 先介紹下安卓的根據系統版本配置不同的資原始檔,可以在資原始檔夾新建values(
安卓7.0上在狀態列上加電池百分比
》》》》》》 安卓7.0上的statusbar上是預設不帶電池百分比的。需要我們加上去。有兩個方法,先寫第一個方法 1. 在frameworks/base/packages/SystemUI/res/layout/system_icons.xml
Android透明狀態列效果和沉浸式模式體驗
其實說到沉浸式狀態列這個名字我也是感到很無奈,真不知道這種叫法是誰先發起的。因為Android官方從來沒有給出過沉浸式狀態列這樣的命名,只有沉浸式模式(Immersive Mode)這種說法。而有些人在沒有完全瞭解清楚沉浸模式到底是什麼東西的情況下,就張冠李戴地認為一
關於如何實現Android透明狀態列的總結
好久沒寫部落格了,哈哈,言歸正傳,最近遇到了透明狀態列的需求,下面總結一下 ,希望能幫助到有需求的人。 我們先看下之前正常的效果,頂部是一條明顯的橙色的顏色。(這是臨時找的圖,跟我程式碼的效果類似,意思一樣) 為了需求和美觀,我們要做成下面的樣子(把頂部透明,樣式基本
Android 4.4跟Android 5.0浸入式狀態列的實現
What:浸入式狀態列作為一個非常優秀的設計方案受到大家的熱捧,Android為了迎合趨勢,也添加了浸入式狀態列。但是Android4.4系統是市場佔有率使得我們必需在Android 4.4上面也要實
ionic1.x 版本的透明狀態列的實現
實現效果: 1.安裝cordova-plugin-statusbar外掛 cordova plugin add https://github.com/apache/cordova-plugin-statusbar.git 2.修改外掛的底層程式碼,進入