精华内容
参与话题
问答
  • Android 状态栏沉浸式的实现

    千次阅读 2015-09-18 23:14:01
    随着Android 系统的不断更新,Android设计趋于简单便捷,所有软件的设计现在...大家都看到从Android 4.4后,有好多APP,像QQ等都有沉浸式状态栏,可能有读者不知道什么是沉浸式,看下图就知道了。本文小编为大家介绍如

    随着Android 系统的不断更新,Android设计趋于简单便捷,所有软件的设计现在都趋于扁平化设计。像微软的新出的Windows 10,google前不久出的Android M也就是Android 6.0系统的设计分格都是扁平化的。可能扯的有点远了。
    大家都看到从Android 4.4后,有好多APP,像QQ等都有沉浸式状态栏,可能有读者不知道什么是沉浸式,看下图就知道了。本文小编为大家介绍如何写出沉浸式。
    大家可以看到系统蓝和QQ状态栏是一个颜色的
    大家可以看到顶端系统栏和QQ状态栏是一个颜色的
    **

    1.第一步 先修改对应界面的布局文件

    在xml文件中添加如下代码

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

    如果不加clipToPadding和fitsSystemWindows这两个属性,Activity中的内容会整体上移状态栏高度的距离,状态栏会将Activity内容遮住。

    2.第二部 然后修改对应的Activity文件

    找到OnCreate方法,在oncreate方法中加入判断SDK的版本是否大于4.4,只有4.4以上才支持状态栏沉浸。
    代码如下:

    public class MainActivity extends Activity {  
    
        @SuppressLint("InlinedApi")  
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
    
            //判断当前SDK版本号,如果是4.4以上,就是支持沉浸式状态栏的  
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
            } 
        }  
    }  

    小编推荐一篇:小编感觉还不错
    小编推荐

    展开全文
  • 小程序状态栏沉浸式

    千次阅读 2019-09-17 16:48:05
    1.全局配置,在app.json里添加配置 "window": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#E8E8E8", "navigationBarTitleText": "飞利浦健康生活"...

    1.全局配置,在app.json里添加配置

    "window": {
    	"backgroundTextStyle": "light",
    	"navigationBarBackgroundColor": "#E8E8E8",
    	"navigationBarTitleText": "飞利浦健康生活",
    	"navigationBarTextStyle": "black",
    	"navigationStyle": "custom"
      },
    

    2.单个页面也可实现,但要求微信版本在7.0以上;在json里添加配置:

    {
      "usingComponents": {},
      "navigationBarTitleText": "首页",
      "navigationStyle":"custom"
    }
    

    3.实现效果如下:

    转载于:https://my.oschina.net/u/4081961/blog/3083777

    展开全文
  • 前言 网上已经有很多有关于系统状态栏的解决方案,这篇文章也不会有什么新奇的解决方案,都是本人经过自己试验...你这状态栏是变色龙状态栏,不是沉浸式的 这应该是沉浸式状态栏吧,系统栏与actionbar颜色设为一致

    转载:http://www.jianshu.com/p/34a8b40b9308


    前言

    网上已经有很多有关于系统状态栏的解决方案,这篇文章也不会有什么新奇的解决方案,都是本人经过自己试验,统计提炼出来的相对靠谱的一套解决方案.

    关于术语

    网上有很多争论:

    你这状态栏是变色龙状态栏,不是沉浸式的
    这应该是沉浸式的状态栏吧,系统栏与actionbar颜色设为一致

    我只想说去你妹的,老子只要自己的app的状态栏能和主题颜色一致就行了,定义那么多术语,让我等小白情以何堪?
    吐槽归吐槽,但还是不得不去试着理解下这些术语怎么来的,引用这里的一段话:

    1. 沉浸式全屏模式
      隐藏status bar(状态栏)使屏幕全屏,让Activity接收所有的(整个屏幕的)触摸事件。
    2. 透明化系统状态栏
      透明化系统状态栏,使得布局侵入系统栏的后面,必须启用fitsSystemWindows属性来调整布局才不至于被系统栏覆盖。

    因此,我就这样理解了:

    沉浸式不就是隐藏状态栏嘛,状态栏不见了?这不就是app全屏模式嘛?wtf?

    而透明式式状态栏就是让app的内容布局可以扩展到系统状态栏?这里有个问题就是为什么能在系统状态栏还显示的情况下,将内容布局扩展到系统状态栏?恩,这应该很好理解,就是Z坐标系的作用了,系统状态栏是覆盖在内容布局上面的,并且是透明的。

    貌似这里所谓透明化系统状态栏才是本菜想要的,不管了,现在开始一一试验,至于这概念理解的对不对,管他呢?那到底应该叫什么,那我就叫自适应状态栏,行不行?

    前提条件

    让系统状态栏颜色随app主题颜色变化而变化这一设计,毫无疑问,也是向ios学习的:从android4.4开始引进的,并且在5.0进行了改进。因此,也只能将这一特性应用在android4.4以上的手机,无法做到全部适配。记得stormzhang(貌似是)曾说过:

    作为一个android程序员,还能有什么比做出ios风格的app更感到悲哀的呢?哎...

    两种情况下的解决方案:

    1. 使用toolbar
      这种方案相对简单,个人喜欢这种方案,本菜虽菜,但喜欢紧跟潮流。toolbar太好用了,
    2. 不使用toolbar

    1. 使用toolbar的解决方案

    这个方法参照了这里,薄荷app的toolbar适配方案

    其基本原理就是:
    theme里添加style: <item name="android:windowTranslucentStatus"> true </item>后,包含toolbar的内容布局就可以扩展至系统状态栏,状态栏会覆盖在toolbar上,如果此时使用android:fitsSystemWindows="true",就可以调整内容布局(估计也是在根布局上加padding)恢复到原来位置.但是,上面的解决方案确是给toolbar加上一个padding-top="25dp",这样就可以做到系统状态栏的颜色和toolbar的颜色保持一致.具体方案可以参照上面的薄荷app的方案链接.


    简述下步骤(只是简述,有疑问请参照上面薄荷app的链接即可):

    1. 引入v7包,并在布局里添加toolbar
      compile ‘com.android.support:appcompat-v7:22.2.1
    2. 在代码中设置透明化:
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
       WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
       local LayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
      }
      当然也可以在theme的样式文件里添加style:<item name="android:windowTranslucentStatus">true</item>,效果相同,但是大神们都说样式文件里设置在某些型号里不生效.ok,大家都在代码里设置就好了
    3. 给toolbar加上padding-top,toolbar代码如下
      <android.support.v7.widget.Toolbar android:id="@+id/toolbar" 
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:paddingTop="@dimen/toolbar_padding_top"
       app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
       app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
       android:background="#30469b">
           <TextView android:layout_gravity="center" 
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textSize="20sp"
             android:text="@string/app_name"/>
      </android.support.v7.widget.Toolbar>
      4.其中android:paddingTop="@dimen/toolbar_padding_top"要在values中的styles文件里设为0dp,在values-v19的styles里设为25dp,原因不多说了

    这样就可以达成了我们的目标,如果只是这样也就罢了,按照上面做就可以了,关键是本菜是喜欢紧跟潮流的,使用MD风格的DrawerLayout+NavigationView时,在android4.4的手机下,就会变这样了:


    android4.4上的效果


    很明显,drawerlayout并没用被扩展至系统状态栏,但在android5.0以上效果还是可以的,这让我很奇怪,只能归咎于5.0的优化了


    android5.0上的效果


    经过各种折腾终于想起来,可以把fitsSystemWindows的特性用在drawerlayout上试试,最后发现居然可以,最终将设置windowTranslucentStatus的代码调整如下:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();    
        local LayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){
            //将侧边栏顶部延伸至status bar
            mDrawerLayout.setFitsSystemWindows(true);        
            //将主页面顶部延伸至status bar;虽默认为false,但经测试,DrawerLayout需显示设置
            mDrawerLayout.setClipToPadding(false);
        }
    }

    最终android4.4上也可以显示正常:


    android4.4上修正后的效果

    2. 不使用toolbar的解决方案

    不使用toolbar时,而是actionbar时,因为actionbar不好定制,所以无法采用上面那个方法,只能采用其它方法,这里的方案主要参考这里:Translucent System Bar 的最佳实践
    这篇简书看的本菜晕乎乎的,仔细看下来,其实都是基于一个原理:
    不管有没有actionbar,内容布局的背景颜色一律设为主题颜色,然后有actionbar的话,就将actionbar与内容布局的背景颜色同时设为主题颜色,然后,每个内容布局的根布局都要设上fitsSystemWindows="true"进行调整,感觉超麻烦有没有?


    不说多少,简述步骤:

    1. 在代码中设置透明化,步骤同上
    2. 设置内容布局的根布局的背景颜色为主题颜色,同时设置fitsSystemWindows="true"
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:background="@color/colorPrimary"
       android:fitsSystemWindows="true" 
       android:orientation="vertical">
    3. 在内容布局的下面再设置一层内容布局,设背景颜色为白色(或其它颜色):
      <LinearLayout    android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:background="@color/c_light_white"
       android:gravity="center"
       android:orientation="vertical">

    至此,这种方案也完成了,看下效果:


    android4.4上的效果

    可以看出,这种方案一般情况下,还是可行的,但是有三个问题:

    1. 如果用上drawerlayout+navigationview,actionbar就会覆盖在侧边栏上(如上图),暂时未找到解决方案,但是我想说你都用drawerlayout+navigationview了,为何不用toolbar,因此这个问题应该不是问题,况且还可以使用其它的侧边栏实现方式,各位道友可以试试
    2. 这种方案在每个根布局上都要设fitsSystemWindows="true"进行调整,当然上面也有优化方案,可仍然觉得很麻烦,
    3. 每个根布局里都要多加的一层布局来覆盖根布局的背景主题颜色

    因此,这种方案的确不是上上之选.

    总结

    本文主要在考虑使用标题栏(actionbar/toolbar)的情况下,做出的方案,当然你也可以自定义标题栏,或者不使用标题栏;其实都可以基于上面一样的道理:

    在状态栏透明化的前提下,调整顶部view的padding-top,来达到状态栏自适应一体化的目的

    网上还有其它蛮多的解决方案,如:

    1. 使用开源库SystemBarTint,这个库也挺不错的,可以动态改变系统状态栏颜色,但是作者已经2年没有维护了,现在技术更新迭代这么快,鬼知道这个库会不会出现什么问题,因此可以放弃使用了
    2. 如果不怕麻烦,还可以new一个高度和状态栏一样高的view,插入到内容布局的上面,但是,想想都觉得麻烦,我也懒得试了

    ---------------------------------------------------------------


    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    这个属性4.4算是全透明(有的机子是过渡形式的透明),5.0就是半透明了 我的模拟器、真机都是半透明,
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){//4.4 全透明状态栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0 全透明实现
    Window window = getWindow();
    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);//calculateStatusColor(Color.WHITE, (int) alphaValue)
    }
    以上代码基本解决适配各种版本全透明状态栏(如导航栏有需求可以再加导航栏)

    展开全文
  • react-native 状态栏沉浸式问题 目的:防止状态栏无缘无故从 沉浸式 变成 非沉浸式 (给自己的笔记) 遇到的问题 应用在后台长时间运行突然进入—(沉浸式的状态栏 —自动—> 没有沉浸式) 从通知栏进入的应用...

    react-native 状态栏沉浸式问题

    目的:防止状态栏无缘无故从 沉浸式 变成 非沉浸式 (给自己的笔记)

    遇到的问题

    1. 应用在后台长时间运行突然进入—(沉浸式的状态栏 —自动—> 没有沉浸式)
    2. 从通知栏进入的应用—(沉浸式的状态栏 —自动—> 没有沉浸式)

    解决方

    android\app\src\main\res\values\styles.xml

    <resources>
        <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
            <item name="android:windowIsTranslucent">true</item>
            <!-- 添加这条代码 ↓↓↓ --> 
            <item name="android:windowTranslucentStatus">true</item>
            <!--  -->
            <item name="android:navigationBarColor">@color/status_bar_color</item>
            <item name="android:statusBarColor">@color/status_bar_color</item>
        </style>
      <style name="SplashScreenTheme" parent="SplashScreen_SplashTheme">
          <item name="colorPrimaryDark">@color/status_bar_color</item>
          <item name="android:navigationBarColor">@color/status_bar_color</item>
          <item name="android:statusBarColor">@color/status_bar_color</item>
          <item name="android:windowIsTranslucent">true</item>
      </style>
    </resources>
    
    展开全文
  • 偶然在github上发现了沉浸式模式实现比较简单的一种方法, 效果图: 代码实现: /** * 设置状态栏全透明 * * @param activity 需要设置的activity */ public static void setTransparent(Activity activity...
  • Android 系统状态栏沉浸式/透明化完整解决方案 http://www.jianshu.com/p/34a8b40b9308 这篇文章介绍了两种方式实现,感觉还不错。 下面的这篇博客就是专门介绍 Android开发:Translucent Sy
  • api.safeArea,页面不被其它内容(如状态栏)遮住的区域 通过safeArea能够知道当前页面哪些地方被遮住,从而做出相应的调整,保证页面重要元素不被遮挡住。 官方文档地址:...
  • github上面的一个很不错的demo(包含了状态栏沉浸式,进度动画大全,自定义封装好的webView,recycleview的+swiprefreshLayout,tablayout,okhttp) 地址:https://github.com/jiangqqlmj/FastDev4Android
  • Android状态栏微技巧,带你真正理解沉浸式模式

    万次阅读 多人点赞 2016-08-23 07:32:55
    记得之前有朋友在留言里让我写一篇关于沉浸式状态栏的文章,正巧我确实有这个打算,那么本篇就给大家带来一次沉浸式状态栏的微技巧讲解。 其实说到沉浸式状态栏这个名字我也是感到很无奈,真不知道这种叫法是谁先...
  • 沉浸式状态栏

    万次阅读 2019-12-29 19:04:49
    点击直接下载 https://github.com/fakerlove1/Demo2 记得多多点赞,fork !!!!!
  • 透明状态栏沉浸式状态栏

    千次阅读 2016-01-25 23:23:07
    透明状态栏沉浸式状态栏)透明状态栏(Translucate StatusBar)是android从4.4开始模仿ios推出的一种模式,他可以改变状态栏的颜色,使其更加的与自己的app样式所统一android 4.4推出的状态栏为透明样式,但会有一...
  • Android 沉浸式状态栏攻略 让你的状态栏变色吧

    万次阅读 多人点赞 2015-09-22 09:21:03
    一、概述近期注意到QQ新版使用了沉浸式状态栏,ok,先声明一下:本篇博客效果下图:关于这个状态栏变色到底叫「Immersive Mode」/「Translucent Bars」有兴趣可以去 为什么在国内会有很多用户把 「透明
  • android状态栏一体化(沉浸式状态栏)

    万次阅读 多人点赞 2014-12-01 09:56:22
    在android kitkat 有一个新的特性可以设置手机状态栏的背景,让手机整个界面的风格保持一致,看起来非常清爽,在今年的google i/o上的android l默认就是这种风格。来现在看我们怎么加上这个酷黑狂拽掉渣天的功能怎么...
  • Android 去掉状态栏 去掉标题栏 沉浸式状态栏 状态栏重叠 布局重叠 SystemBarTintManager systembartint-1.0.4
  • 简介:android 4.4 以上沉浸式状态栏沉浸式导航栏管理,一句代码轻松实现,以及对 bar 的其他设置,详见 README,http://www.jianshu.com/p/2a884e211a62 ImmersionBar -- android 4.4以上沉浸式实现 直接看效果...
  • android图片状态栏实现沉浸式状态栏

    千次阅读 2017-10-22 16:51:26
    沉浸式状态栏实现起来的文章网上有很多了,不过再MD中有一个图片和toolbar一起使用,还会产生过度效果的沉浸式状态栏,像下面这样 标题栏XML代码如下 android:layout_width="match_parent" android:layout_...
  • Android沉浸式状态栏(透明状态栏)

    万次阅读 2017-06-18 22:32:25
    这是个老话题了,不纠结叫法了。勿怒,一起来看看那些坑。 从android 4.4起,系统提供了这个功能。到5.0之后,系统有改进了,更好用了。... if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { ...
  • 实现4.4以后的状态栏与app的导航栏颜色相同,android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明。

空空如也

1 2 3 4 5 ... 20
收藏数 36,161
精华内容 14,464
关键字:

状态栏