1. 程式人生 > >Android5.0使用全透明狀態列

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_mainxml中的佈局適應螢幕
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.修改外掛的底層程式碼,進入