本篇文章為大家展示了Android中如何實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
目前創(chuàng)新互聯(lián)建站已為數(shù)千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站改版維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、陽(yáng)高網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
首先看下第一種方式
系統(tǒng)的方式沉浸式狀態(tài)欄實(shí)現(xiàn)
步奏一
//當(dāng)系統(tǒng)版本為4.4或者4.4以上時(shí)可以使用沉浸式狀態(tài)欄 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明狀態(tài)欄 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明導(dǎo)航欄 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); }
步奏二
布局加入:
android:fitsSystemWindows="true" android:clipToPadding="true"
我們看下activity和布局文件
FirstActivity.java:
/** * 沉浸式狀態(tài)欄 */ private void initState() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明狀態(tài)欄 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明導(dǎo)航欄 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); } }
activity_first.xml:
接著看下第二種方式
實(shí)現(xiàn)思路,添加隱藏布局,然后我們動(dòng)態(tài)的計(jì)算狀態(tài)欄的高度,然后把這個(gè)高度設(shè)置成這個(gè)隱藏的布局的高度,便可以實(shí)現(xiàn)
在這里我們通過(guò)反射來(lái)獲取狀態(tài)欄的高度
/** * 通過(guò)反射的方式獲取狀態(tài)欄高度 * * @return */ private int getStatusBarHeight() { try { Class> c = Class.forName("com.android.internal.R$dimen"); Object obj = c.newInstance(); Field field = c.getField("status_bar_height"); int x = Integer.parseInt(field.get(obj).toString()); return getResources().getDimensionPixelSize(x); } catch (Exception e) { e.printStackTrace(); } return 0; }
來(lái)看下SecondActivity和布局文件吧
SecondActivity.java
package com.example.translucentbarstest; import android.os.Build; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.WindowManager; import android.widget.LinearLayout; import java.lang.reflect.Field; /** * Created by 若蘭 on 2016/1/22. * 一個(gè)懂得了編程樂(lè)趣的小白,希望自己 * 能夠在這個(gè)道路上走的很遠(yuǎn),也希望自己學(xué)習(xí)到的 * 知識(shí)可以幫助更多的人,分享就是學(xué)習(xí)的一種樂(lè)趣 * QQ:1069584784 */ public class SecondActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_two); initState(); } /** * 動(dòng)態(tài)的設(shè)置狀態(tài)欄 實(shí)現(xiàn)沉浸式狀態(tài)欄 * */ private void initState() { //當(dāng)系統(tǒng)版本為4.4或者4.4以上時(shí)可以使用沉浸式狀態(tài)欄 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明狀態(tài)欄 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明導(dǎo)航欄 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); // LinearLayout linear_bar = (LinearLayout) findViewById(R.id.ll_bar); linear_bar.setVisibility(View.VISIBLE); //獲取到狀態(tài)欄的高度 int statusHeight = getStatusBarHeight(); //動(dòng)態(tài)的設(shè)置隱藏布局的高度 LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) linear_bar.getLayoutParams(); params.height = statusHeight; linear_bar.setLayoutParams(params); } } /** * 通過(guò)反射的方式獲取狀態(tài)欄高度 * * @return */ private int getStatusBarHeight() { try { Class> c = Class.forName("com.android.internal.R$dimen"); Object obj = c.newInstance(); Field field = c.getField("status_bar_height"); int x = Integer.parseInt(field.get(obj).toString()); return getResources().getDimensionPixelSize(x); } catch (Exception e) { e.printStackTrace(); } return 0; } }
activity_second.xml:
接下來(lái)看下第三種
這個(gè)是用的github上的第三方庫(kù)
1.庫(kù)地址:https://github.com/jgilfelt/SystemBarTint
2.添加依賴庫(kù):
compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
步奏一
android:fitsSystemWindows="true" android:clipToPadding="true
步奏二
SystemBarTintManager tintManager = new SystemBarTintManager(this); // 激活狀態(tài)欄 tintManager.setStatusBarTintEnabled(true); // enable navigation bar tint 激活導(dǎo)航欄 tintManager.setNavigationBarTintEnabled(true); //設(shè)置系統(tǒng)欄設(shè)置顏色 //tintManager.setTintColor(R.color.red); //給狀態(tài)欄設(shè)置顏色 tintManager.setStatusBarTintResource(R.color.mask_tags_1); //Apply the specified drawable or color resource to the system navigation bar. //給導(dǎo)航欄設(shè)置資源 tintManager.setNavigationBarTintResource(R.color.mask_tags_1);
來(lái)看下代碼吧
ThreeActivity.java
package com.example.translucentbarstest; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.WindowManager; import com.readystatesoftware.systembartint.SystemBarTintManager; /** * Created by 若蘭 on 2016/1/22. * 一個(gè)懂得了編程樂(lè)趣的小白,希望自己 * 能夠在這個(gè)道路上走的很遠(yuǎn),也希望自己學(xué)習(xí)到的 * 知識(shí)可以幫助更多的人,分享就是學(xué)習(xí)的一種樂(lè)趣 * QQ:1069584784 */ public class ThreeActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_three); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { //透明狀態(tài)欄 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明導(dǎo)航欄 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); SystemBarTintManager tintManager = new SystemBarTintManager(this); // 激活狀態(tài)欄 tintManager.setStatusBarTintEnabled(true); // enable navigation bar tint 激活導(dǎo)航欄 tintManager.setNavigationBarTintEnabled(true); //設(shè)置系統(tǒng)欄設(shè)置顏色 //tintManager.setTintColor(R.color.red); //給狀態(tài)欄設(shè)置顏色 tintManager.setStatusBarTintResource(R.color.mask_tags_1); //Apply the specified drawable or color resource to the system navigation bar. //給導(dǎo)航欄設(shè)置資源 tintManager.setNavigationBarTintResource(R.color.mask_tags_1); } } }
activity_three.xml:
上述內(nèi)容就是Android中如何實(shí)現(xiàn)一個(gè)沉浸式狀態(tài)欄,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。