如何实现Androidqq沉浸式状态栏实现

Android实现沉浸式状态栏_网页漂亮网
您的位置: >
Android实现沉浸式状态栏
字号:[ & & & & & &
前段时间,项目中用到了沉浸式的状态栏,在此记录一下,代码如下:
package com.jackie.
import android.os.B
import android.os.B
import android.support.v7.app.AppCompatA
import android.view.V
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && Build.VERSION.SDK_INT &= 19) {
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
&效果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持网页漂亮网。
本文移动端链接:
相关阅读:
本站已经安全运行:
创建百年品牌今天看啥 热点:
android沉浸式状态栏实现
传统的手机状态栏是呈现出黑色条状的,有的和手机主界面有很明显的区别。这样就在一定程度上牺牲了视觉宽度,界面面积变小。
沉浸模式的状态栏和主界面完全融为了一体,在设计上有不同的视觉感受。
我们先上两张图,很容易看出区别:
Android在4.4的时候增加了透明状态栏与导航栏的功能,依托于这个新特性,我们可以开始跟随潮流,实现Android的沉浸式状态栏 其实上图展示的这个关于界面的代码非常简单
* 关于界面
* @author SuS
public class AboutActivity extends BaseActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_about);
setImmerseLayout(findViewById(mon_back));
initBackButton();
setTitleBar(R.string.durian_about);
protected void onResume() {
super.onResume();
protected void onPause() {
super.onPause();
protected void onDestroy() {
super.onDestroy();
现在请注意setImmerseLayout()这个方法,这个方法是在BaseActivity中实现的
public class BaseActivity extends FragmentActivity {
private static final String TAG = BaseA
...............
public void initBackButton() {
ImageView backButton = (ImageView) this.findViewById(R.id.durian_back_image);
backButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
finishActivity();
protected void setImmerseLayout(View view) {
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.KITKAT) {
Window window = getWindow();
/*window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);*/
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
int statusBarHeight = ScreenUtil.getStatusBarHeight(this.getBaseContext());
view.setPadding(0, statusBarHeight, 0, 0);
public void finishActivity() {
overridePendingTransition(R.anim.push_right_in, R.anim.push_right_out);
public void setTitleBar(int id) {
TextView tvName = (TextView) findViewById(R.id.durian_title_text);
tvName.setText(id);
使用 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 或者 window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
都可以使状态栏透明,但是关键是下面这两行代码,如果没有这两行,会是这样
那么这两行神奇的代码的原理是什么? 我们先看一下ScreenUtil中的getStatusBarHeight方法
* 用于获取状态栏的高度。 使用Resource对象获取(推荐这种方式)
* @return 返回状态栏高度的像素值。
public static int getStatusBarHeight(Context context) {
int result = 0;
int resourceId = context.getResources().getIdentifier(status_bar_height, dimen,
if (resourceId & 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
这里是获得状态栏的高度,然后我们就可以通过设置common_back的padding属性 即:view.setPadding(0, statusBarHeight, 0, 0)来达到终极效果 但是这里还是需要注意细节的,首先大家应该理解padding的含义:内边距 那么再看一下common_back的布局文件 在activity_about.xml中我们是使用include引用的common_back
common_back的布局如下:
&framelayout android:background="@color/common_top_bg" android:id="@+id/durian_head_layout" android:layout_height="wrap_content" android:layout_width="match_parent" xmlns:android="/apk/res/android" xmlns:tools="/tools"&
&/framelayout&
这里我们使用了一层FrameLayout包裹住RelativeLayout,这里有什么玄机那,其实这里就是为了 方便上面那两行神奇的代码起作用,这样我们就能设置RelativeLayout相对于FrameLayout的内边距为状态栏的高度了 也就完美的达到了沉浸式状态栏的目的,而且保证导航栏的相对位置不变。
这里存在一个common_back作为一个基准来控制高度达到状态栏的高度,如果一个activity只有一个背景图片或者不以类似导航栏的空间作为基准的话,怎么实现沉浸式状态栏,例如达到这种状态 我们只需要在代码这样设置
protected void setImmerseLayout(View view) {
if (Build.VERSION.SDK_INT &= Build.VERSION_CODES.KITKAT) {
Window window = getWindow();
/*window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);*/
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
/* int statusBarHeight = ScreenUtil.getStatusBarHeight(this.getBaseContext());
view.setPadding(0, statusBarHeight, 0, 0);*/
然后在当前activity的布局文件中加入这两句话 android:fitsSystemWindows=true android:clipToPadding=true
这时候状态栏的背景与Activity的整个大背景融合在一起了
基于以上的方法介绍,我们可以实现状态栏与导航栏以及状态栏与页面大背景的沉浸式体验。
其实上面也可以看出代码封装的一些技巧:如让我们所有的activity继承BaseActivity,这样像
setImmerseLayout(findViewById(mon_back)); initBackButton(); setTitleBar(R.string.durian_about); 诸如此类的操作实现起来省时省力了!
相关搜索:
相关阅读:
相关频道:
Android教程最近更新看来论坛里很多人搞不清楚沉浸式和透明状态栏的区别
请大家搞清楚安卓里沉浸式状态栏和透明状态栏的区别好嘛?uc最新公测版是透明状态栏不是沉浸式
上UC,有快感!
该帖共收到 16 条回复!
发表于 日 00:02
来自HTC 802d B
miui6是沉浸式
上UC,有快感!
发表于 日 00:06
来自HTC 802d B
所以uc没有用什么伪沉浸式的说法
上UC,有快感!
发表于 日 00:14
来自HTC 802d B
好吧,我错了miui6那也不是沉浸
上UC,有快感!
发表于 日 00:17
来自HTC 802d B
我发这个贴只是不想再看到有人说uc用的是伪沉浸状态栏而已。
上UC,有快感!
发表于 日 00:48
UC这个就是的,魅族的flyme4.0就是这样的
上UC,有快感!
发表于 日 02:14
来自 C6802 Build
提示: 作者被禁止或删除 内容自动屏蔽
上UC,有快感!
发表于 日 10:57
状态栏变色≠沉浸式状态栏,所谓现在说的沉浸式状态栏是Android 4.4后加入的新api接口,需要软件商在制作软件的时候使用该接口,方可实现状态栏变色。而现在的应用比较杂乱,厂商做法也不规范,导致很好的一个接口不能被完美的使用。对此我们特制作了fantastic bar(奇幻状态栏),奇幻状态栏是强行根据程序改变状态栏颜色,会根据颜色色值差异自动改变图标及文字颜色,同时在支持沉浸式状态栏的应用中优先使用沉浸式状态栏。真正做到了完美统一风格的Android 4.4。
上UC,有快感!
发表于 日 11:13
多看阅读那种是沉浸吗?
上UC,有快感!
发表于 日 11:20
来自Nexus 5
好得闲 发表于 日 10:57
状态栏变色≠沉浸式状态栏,所谓现在说的沉浸式状态栏是Android 4.4后加入的新api接口,需要软件商在制作软 ...
fiui的简介啊
上UC,有快感!
发表于 日 11:25
看看& && && && &&&
上UC,有快感!
发表于 日 11:37
来自华为G750
snoopy0314 发表于 日 02:14
习惯性看到一大批人说什么沉浸式,都没搞懂什么是沉浸式就在这里大说特说,已无力回答了,现在这种透明通知 ...
不不不、只有安卓4.4之后的系统可以变色(或者叫透明)、我想说的是安卓4.4官方介绍并没有介绍变色这一点、那么开发的一个功能属于官方公布的哪一类?除了沉浸还能归到别的吗?4.4是虽然也是4.*但却是一个大版本的更新、官方不可能每个功能细节都介绍到、所以是不是沉浸只有软件开发者(或能看懂系统源码)才有发言权、不能因为没提到就认为不是沉浸
上UC,有快感!
发表于 日 11:45
来自华为G750
是用的沉浸接口、不用怀疑、国内软件目前都是屏蔽了自动全屏、安卓原版的沉浸把状态栏拉出来就是现在我们见到的样子、我们只是屏蔽了状态栏自动收起
上UC,有快感!
发表于 日 13:08
沉浸不好吗?出来了又吐槽 不出来的时候 又叫支持 这是闹哪样
上UC,有快感!
发表于 日 13:23
来自不明物体
楼主说对了。
上UC,有快感!

我要回帖

更多关于 android6沉浸式状态栏 的文章

 

随机推荐