如何实现Android沉浸式状态栏

 我来答
熊猫卓Sun
2016-06-04 · Android开发、产品经理、项目经理
熊猫卓Sun
采纳数:32 获赞数:67

向TA提问 私信TA
展开全部

android 4.4版本之前是不支持状态栏沉浸的,4.4版本级以上那个版本支持状态栏沉浸,要实现与5.0自带的效果一直请看代码

1、xml布局文件,直接上图看吧,比较调理,重点注意我标注的部分,需要在显示界面的布局控件的最外层控件和标题栏(若果有的话)设置属性

android:clipToPadding="true"
android:fitsSystemWindows="true"


2、代码设置

代码执行必须在setContentView()之前执行还能有效

/**
* 作者:Created by sfq on 2016/06/040010 15:03
* 功能描述:编辑状态的颜色
* @param context activity
*/
public static void editStatusBarColor(Context context) {
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) 

{
       //状态栏透明 需要在创建SystemBarTintManager 之前调用。
       CommonUtil.setTranslucentStatus((Activity) context, true);
   }
   SystemBarTintManager tintManager = new SystemBarTintManager((Activity)        context);
   tintManager.setStatusBarTintEnabled(true);
   //使StatusBarTintView 和 actionbar的颜色保持一致,风格统一。
   tintManager.setStatusBarTintResource(R.color.temp_immersion_color);
}

 本人将方法独立成一个静态方法,便于多次调用,当然染色的设定要最好作为参数传入,可以使方法更适用

微测检测5.10
2023-05-10 广告
您好!建议咨 深圳市微测检测有限公司,已建立起十余个专业实验室,企业通过微测检测就可以获得一站式的测试与认 证解决方案;(EMC、RF、MFi、BQB、QI、USB、安全、锂电池、快充、汽车电子EMC、汽车手机互 联、语音通话质量),认证遇... 点击进入详情页
本回答由微测检测5.10提供
lihongwei41
2016-04-06 · TA获得超过4万个赞
知道大有可为答主
回答量:2.5万
采纳率:0%
帮助的人:6035万
展开全部
沉浸式通知栏Android4.4以上才支持的新特性。4.3不支持。
具体实现方式如下:
1.新建个公共style,设置android:fitsSystemWindows=true
<!-- 设置应用布局时是否考虑系统窗口布局;true --> <style name="AppBaseTheme" parent="android:Theme.Light.NoTitleBar"> <item name="android:fitsSystemWindows">true</item> </style>

2. 修改AndroidManifest.xml,让所有的activity样式默认设置为AppBaseTheme(*不同项目要灵活处理,笔者项目的activity样式都是统一的所以这样设置没问题,但是实际情况下不同的activity可能调用的样式不一样,需要读者自行按自己的项目来设置)
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppBaseTheme" android:name="****">

3.新增沉浸式通知栏实现类,实现原理很简单。
1)判断当前系统版本是不是4.4以上,判断代码如下:
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT)
2)如果大于4.4则设置状态栏透明化,代码如下:
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
3)获取activity的根rootView(DecorView),然后创建一个新的view stateBarView并把它添加到rootView(这里手动给它设置个ID,下次进来时先判断rootView是否已创建stateBarView,如果已创建则直接获取该View这样可以防止重复创建,导致内存泄露)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旧城故事
2016-03-29 · TA获得超过375个赞
知道小有建树答主
回答量:492
采纳率:72%
帮助的人:165万
展开全部
1、简介

沉浸式通知栏Android4.4以上才支持的新特性。4.3不支持。

2、方法
具体实现方式如下:
1.新建个公共style,设置android:fitsSystemWindows=true
<!-- 设置应用布局时是否考虑系统窗口布局;true --> <style name="AppBaseTheme" parent="android:Theme.Light.NoTitleBar"> <item name="android:fitsSystemWindows">true</item> </style>
2. 修改AndroidManifest.xml,让所有的activity样式默认设置为AppBaseTheme(*不同项目要灵活处理,笔者项目的activity样式都是统一的所以这样设置没问题,但是实际情况下不同的activity可能调用的样式不一样,需要读者自行按自己的项目来设置)
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppBaseTheme" android:name="****">
3.新增沉浸式通知栏实现类,实现原理很简单。
1)判断当前系统版本是不是4.4以上,判断代码如下:
if (VERSION.SDK_INT >= VERSION_CODES.KITKAT)
2)如果大于4.4则设置状态栏透明化,代码如下:
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
3)获取activity的根rootView(DecorView),然后创建一个新的view stateBarView并把它添加到rootView(这里手动给它设置个ID,下次进来时先判断rootView是否已创建stateBarView,如果已创建则直接获取该View这样可以防止重复创建。
3、注意事项

布局文件以后,有几个点要特别注意:
• ToolBar高度设置为wrap_content
• ToolBar添加属性android:fitsSystemWindows="true"
• header_just_username.xml的跟布局RelativeLayout,添加属性android:fitsSystemWindows="true"
android:fitsSystemWindows这个属性,主要是通过调整当前设置这个属性的view的padding。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友00b55c4
2016-04-14 · 超过61用户采纳过TA的回答
知道小有建树答主
回答量:194
采纳率:100%
帮助的人:85.5万
展开全部
关于这个状态栏变色到底叫「Immersive Mode」/「Translucent Bars」有兴趣可以去 为什么在国内会有很多用户把 「透明栏」(Translucent Bars)称作 「沉浸式顶栏」?上面了解了解,请勿指点我说的博文标题起得不对,thx。

恩,接下来正题。

首先只有大于等于4.4版本支持这个半透明状态栏的效果,但是4.4和5.0的显示效果有一定的差异,所有本篇博文内容为:

如何实现半透明状态栏效果在大于4.4版本之上。
如何让4.4的效果与5.0的效果尽可能一致。

看了不少参考文章,都介绍到这个库,大家可以了解:SystemBarTint。

不过本篇博文并未基于此库,自己想了个hack,对于此库源码有空再看了。
http://blog.csdn.net/lmj623565791/article/details/48649563
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
蜻蜓路过夏天
2016-03-26 · TA获得超过112个赞
知道小有建树答主
回答量:648
采纳率:0%
帮助的人:358万
展开全部
这个特性是andorid4.4支持的,最少要api19才可以使用。下面介绍一下使用的方法,非常得简单: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Assaultgfn
2016-04-23
知道答主
回答量:9
采纳率:0%
帮助的人:4.6万
展开全部
你需要Xposed框架,根据你的手机可以在网上找的相关信息。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式