Android沉浸狀態(tài)欄兼容4.4API筆記

手上有一臺(tái)古老的小米三,平常也沒(méi)用,昨天拿出來(lái)運(yùn)行下項(xiàng)目的時(shí)候發(fā)現(xiàn)狀態(tài)欄是黑乎乎的。有強(qiáng)迫癥的我就受不了了居砖,于是就查了下4.4的Android兼容沉浸狀態(tài)欄。

Android Studio兼容##

在Github上有一個(gè)開(kāi)源的系統(tǒng)欄管理器框架驴娃,叫<a >Systembartint</a>
首先奏候,將其引用到項(xiàng)目當(dāng)中: compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
再來(lái)看下官方Demo的使用方法。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_match_actionbar);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        setTranslucentStatus(true);
    }

    SystemBarTintManager tintManager = new SystemBarTintManager(this);
    tintManager.setStatusBarTintEnabled(true);
    tintManager.setStatusBarTintResource(R.color.statusbar_bg);

  }
  @TargetApi(19) 
  private void setTranslucentStatus(boolean on) {
    Window win = getWindow();
    WindowManager.LayoutParams winParams = win.getAttributes();
    final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
    if (on) {
        winParams.flags |= bits;
    } else {
        winParams.flags &= ~bits;
    }
    win.setAttributes(winParams);
}

使用方法還是比較簡(jiǎn)單的唇敞,代碼量不大蔗草。集成到工程的BaseActivity當(dāng)中執(zhí)行。
運(yùn)行結(jié)果:

運(yùn)行結(jié)果

很明顯的View往上移動(dòng)了疆柔。
然后繼續(xù)查看官方的sample源碼咒精。

然而發(fā)現(xiàn)有一個(gè)api19的styles

然后在項(xiàng)目當(dāng)中創(chuàng)建一個(gè)19api的styles 使用這個(gè)主題。然而旷档。模叙。。崩潰了鞋屈。
然后修修改改 修修改改 后 改好了范咨。。厂庇。 最后修改好的styles

在項(xiàng)目的res目錄下 創(chuàng)建一個(gè)叫values-v19的文件夾渠啊,然后創(chuàng)建styles.xml文件夾把以下代碼復(fù)制過(guò)去

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <!--兼容4.4API沉浸狀態(tài)欄-->
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:fitsSystemWindows">true</item>
    </style>
</resources>

最后上一下修改好后完整的BaseActivity
BaseActivity代碼 因?yàn)槲耶?dāng)時(shí)創(chuàng)建項(xiàng)目的時(shí)候 默認(rèn)的主題是Theme.AppCompat.Light.DarkActionBar 所以需要隱藏一下ActionBar

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //判斷api是否是19和20 才進(jìn)行適配 21以上的版本就不需要自己再去兼容了
    if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT || Build.VERSION.SDK_INT ==Build.VERSION_CODES.KITKAT_WATCH) {
        setTranslucentStatus(true);
        SystemBarTintManager tintManager = new SystemBarTintManager(this);
        tintManager.setStatusBarTintEnabled(true);
        tintManager.setStatusBarTintResource(R.color.colorPrimary);
    } else {
            getSupportActionBar().hide();//隱藏Action
    }
}

最后 需要在res目錄下再建立一個(gè)values-v21的文件夾 也放入一個(gè)style.xml文件,這個(gè)xml文件可以直接在values目錄下把style復(fù)制過(guò)來(lái)权旷,至于原因是因?yàn)樘骝龋呀?jīng)指定了19的api了,在運(yùn)行程序的時(shí)候,系統(tǒng)發(fā)現(xiàn)有指定api的style的話躲查,會(huì)去引入距當(dāng)前系統(tǒng)api版本最近的一個(gè)style它浅,當(dāng)然,它是不會(huì)引用比當(dāng)前系統(tǒng)更高api的style熙含。所有如果不去指定21的style的話罚缕,那么它會(huì)引用api19的style艇纺,當(dāng)然怎静,也可以使用v19的style,但是這樣的話黔衡,就得兼容>=19的API蚓聘,在BaseActivity的onCreate中 修改if條件 改為:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //判斷api大于或等于19
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT ) {
        setTranslucentStatus(true);
        SystemBarTintManager tintManager = new SystemBarTintManager(this);
        tintManager.setStatusBarTintEnabled(true);
        tintManager.setStatusBarTintResource(R.color.colorPrimary);
    } else {
            getSupportActionBar().hide();//隱藏Action
    }
}

最后運(yùn)行結(jié)果

最后修改的運(yùn)行結(jié)果

Eclipse兼容

Eclipse的話 不需要集成依賴 直接調(diào)用setColor即可 起初有在android studio中使用 然而 崩潰了,但是在Eclipse上倒是正常盟劫。
這個(gè)方法記得好像是在一個(gè)csdn的博客上看到的夜牡,抱歉,不記得地址了

public static void setColor(Activity activity, int color) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        View statusView = createStatusView(activity, color);
        ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
        decorView.addView(statusView);
        ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
        rootView.setFitsSystemWindows(true);
        rootView.setClipToPadding(true);
    }
}

private static View createStatusView(Activity activity, int color) {
    int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
    int statusBarHeight = activity.getResources().getDimensionPixelSize(resourceId);
    View statusView = new View(activity);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
            statusBarHeight);
    statusView.setLayoutParams(params);
    statusView.setBackgroundColor(color);
    return statusView;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侣签,一起剝皮案震驚了整個(gè)濱河市塘装,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌影所,老刑警劉巖蹦肴,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異猴娩,居然都是意外死亡阴幌,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門卷中,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)矛双,“玉大人,你說(shuō)我怎么就攤上這事蟆豫∫楹觯” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵十减,是天一觀的道長(zhǎng)栈幸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)嫉称,這世上最難降的妖魔是什么侦镇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮织阅,結(jié)果婚禮上壳繁,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好闹炉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布蒿赢。 她就那樣靜靜地躺著,像睡著了一般渣触。 火紅的嫁衣襯著肌膚如雪羡棵。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天嗅钻,我揣著相機(jī)與錄音皂冰,去河邊找鬼。 笑死养篓,一個(gè)胖子當(dāng)著我的面吹牛秃流,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播柳弄,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼舶胀,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了碧注?” 一聲冷哼從身側(cè)響起嚣伐,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎萍丐,沒(méi)想到半個(gè)月后轩端,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡碉纺,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年船万,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骨田。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耿导,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出态贤,到底是詐尸還是另有隱情舱呻,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布悠汽,位于F島的核電站箱吕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏柿冲。R本人自食惡果不足惜茬高,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望假抄。 院中可真熱鬧怎栽,春花似錦丽猬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至强饮,卻和暖如春由桌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邮丰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工行您, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掏颊,地道東北人擂找。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親妈经。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容