1、引入

dependencies {compile 'com.gyf.barlibrary:barlibrary:2.3.0'
}

2.使用:在BaseActivity 中初始化

public  abstract class BaseActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//隐藏掉系统原先的导航栏supportRequestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(getId());ImmersionBar.with(this).init(); //初始化,默认透明状态栏和黑色导航栏initView();initData();initListener();}public abstract int getId() ;protected abstract void initView();protected abstract void initData();protected abstract void initListener();@Overrideprotected void onDestroy() {super.onDestroy();//不调用该方法,如果界面bar发生改变,在不关闭app的情况下,退出此界面再进入将记忆最后一次bar改变的状态ImmersionBar.with(this).destroy();}
}

例如:MainActivity 继承 BaseActivity, 而Main的布局如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:orientation="vertical"android:layout_height="match_parent"><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar1"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="#000000"app:titleTextColor="@android:color/white"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><TextViewandroid:id="@+id/title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="沉浸式状态栏"android:textColor="#ffffff"android:textSize="18sp" /></RelativeLayout></android.support.v7.widget.Toolbar><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent"></ListView>
</LinearLayout>

那么运行起来的效果如下图:

发现问题没有?解决状态栏和布局顶部重合

那么我们需要再对应的MainActivity界面,调用如下代码:

        //第一种方式解决状态栏和布局重叠问题ImmersionBar.with(this).titleBar(toolbar1).init();

第二种常见的功能如下图:

滑动条目,可以让状态栏和titleBar和导航栏变色

依赖完,继承BaseActivity之后代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/darker_gray"android:orientation="vertical"><FrameLayoutandroid:layout_width="match_parent"android:layout_height="200dp"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerHorizontal="true"android:scaleType="centerCrop"android:src="@mipmap/test" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><Viewandroid:id="@+id/top_view"android:layout_width="match_parent"android:layout_height="0dp" /><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?actionBarSize"app:title="图片状态栏 + 彩色导航栏"app:titleTextColor="@android:color/white"/></LinearLayout></FrameLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"><SeekBarandroid:id="@+id/seek_bar"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/btn_status_color"style="@style/btn"android:text="修改状态栏颜色" /><Buttonandroid:id="@+id/btn_navigation_color"style="@style/btn"android:text="修改导航栏颜色" /><Buttonandroid:id="@+id/btn_color"style="@style/btn"android:text="恢复初始值" /></LinearLayout></LinearLayout>

对应的Activity代码如下:

package com.example.administrator.toolbar;import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.Toast;import com.gyf.barlibrary.ImmersionBar;import static com.example.administrator.toolbar.R.id.toolbar1;/*** Created by Administrator on 2017/7/13/013.*/public class PicAndColorActivity extends BaseActivity implements View.OnClickListener, SeekBar.OnSeekBarChangeListener {private View mTopView;private Toolbar mToolbar;private SeekBar mSeekBar;/*** 修改状态栏颜色*/private Button mBtnStatusColor;/*** 修改导航栏颜色*/private Button mBtnNavigationColor;/*** 恢复初始值*/private Button mBtnColor;@Overridepublic int getId() {return R.layout.activity_pic_color;}@Overrideprotected void initView() {mTopView = (View) findViewById(R.id.top_view);mToolbar = (Toolbar) findViewById(R.id.toolbar);mSeekBar = (SeekBar) findViewById(R.id.seek_bar);mBtnStatusColor = (Button) findViewById(R.id.btn_status_color);mBtnColor = (Button) findViewById(R.id.btn_color);mBtnNavigationColor = (Button) findViewById(R.id.btn_navigation_color);mSeekBar.setOnSeekBarChangeListener(this);}@Overrideprotected void initData() {ImmersionBar.with(this).statusBarView(R.id.top_view) //解决状态栏和布局重叠问题,或使用   .titleBar(mToolbar) 任选其一,不可混用.navigationBarColor(R.color.colorPrimary) //底部导航栏颜色,不写默认黑色.fullScreen(true)//有导航栏的情况下,activity全屏显示,也就是activity最下面被导航栏覆盖,不写默认非全屏.addTag("PicAndColor")  //给上面参数打标记,以后可以通过标记恢复.init();}@Overrideprotected void initListener() {mBtnNavigationColor.setOnClickListener(this);mBtnColor.setOnClickListener(this);mBtnStatusColor.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_status_color://修改状态栏为红色,ImmersionBar.with(this).statusBarColor(R.color.colorAccent)//状态栏颜色,不写默认透明色.init();break;case R.id.btn_navigation_color://修改导航栏颜色if (ImmersionBar.hasNavigationBar(this)) {//判断是否有导航栏ImmersionBar.with(this).navigationBarColor(R.color.colorAccent) //导航栏颜色,不写默认黑色.init();} else {Toast.makeText(this, "当前设备没有导航栏", Toast.LENGTH_SHORT).show();}break;case R.id.btn_color://恢复初始值ImmersionBar.with(this).getTag("PicAndColor").init(); //根据tag标记来恢复break;}}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {float alpha = (float) progress / 100;ImmersionBar.with(this).statusBarColorTransform(R.color.orange)//状态栏变色后的颜色.navigationBarColorTransform(R.color.tans)//导航栏变色后的颜色.addViewSupportTransformColor(mToolbar)//设置支持view变色,可以添加多个view,不指定颜色,默认和状态栏同色,默认是透明颜色.barAlpha(alpha)  //状态栏和导航栏透明度,不写默认0.0f,  mToolbar会根据状态栏的颜色和透明度进行变化.init();}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}
}

图片全屏显示

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/activity_main"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@android:color/darker_gray"><ImageViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_centerHorizontal="true"android:scaleType="centerCrop"android:src="@mipmap/bg" /><TextViewandroid:id="@+id/text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:text="透明度:0.0f"android:textColor="@color/colorAccent"android:textSize="20sp" /><SeekBarandroid:id="@+id/seek_bar"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="center"android:layout_marginTop="50dp" /><android.support.v7.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?actionBarSize"app:title="全屏图片"app:titleTextColor="@android:color/white"/></FrameLayout>
package com.example.administrator.toolbar;import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.widget.FrameLayout;
import android.widget.SeekBar;
import android.widget.TextView;import com.gyf.barlibrary.ImmersionBar;import static com.example.administrator.toolbar.R.id.toolbar;
import static com.example.administrator.toolbar.R.id.toolbar1;/*** Created by Administrator on 2017/7/16/016.*/public class FullScreenActivity extends BaseActivity implements SeekBar.OnSeekBarChangeListener {/*** 透明度:0.0f*/private TextView mTextView;private SeekBar mSeekBar;private Toolbar mToolbar;private FrameLayout mActivityMain;@Overridepublic int getId() {return R.layout.activity_full_screen;}@Overrideprotected void initView() {mTextView = (TextView) findViewById(R.id.text_view);mSeekBar = (SeekBar) findViewById(R.id.seek_bar);mToolbar = (Toolbar) findViewById(toolbar);mActivityMain = (FrameLayout) findViewById(R.id.activity_main);}@Overrideprotected void initData() {///解决状态栏和布局重叠问题,ImmersionBar.with(this).titleBar(mToolbar,false)//false表示状态看不支持变色.transparentBar()//透明状态栏和导航栏(设置此方法,fullScreen()方法自动为true).init();}@Overrideprotected void initListener() {mSeekBar.setOnSeekBarChangeListener(this);}@Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {float alpha = (float) progress / 100;mTextView.setText("透明度:" + alpha + "f");ImmersionBar.with(this).addViewSupportTransformColor(mToolbar,R.color.colorPrimary)//设置支持view变色,可以添加多个view,不指定颜色,默认和状态栏同色,默认是透明颜色.navigationBarColorTransform(R.color.orange)//导航栏变色后的颜色.barAlpha(alpha)//状态栏和导航栏透明度,不写默认0.0f,  mToolbar会根据状态栏的颜色和透明度进行变化.init();}@Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}@Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}
}

Android各种沉浸式状态栏实现相关推荐

  1. Android一键沉浸式状态栏(透明状态栏)

    文章适合新手了解Android一键沉浸式状态栏.文章在编写过程中难免有疏漏和错误,欢迎大佬指出文章的不足之处:更多内容请点进

  2. Android实现沉浸式状态栏(透明状态栏)(QQ和简书样式)

    本文内容大多参考网络上的Android实现沉浸式状态栏教程,由于看了太多类似文章,固在此不再一一列举出处.本文仅为我自己梳理思路和供各位看到本文的朋友参考(百度:Android沉浸式状态栏,第一页内容 ...

  3. Android 之 沉浸式状态栏及顶部状态栏背景色设置

    现在很多应用都引用了沉浸式状态栏,如QQ,效果下图: 效果很酷炫,其实设置也很简单.但是,需要注意的是,这种效果只能在API19以及以上版本中才能够做到. 方法一: 首先,如果想让界面Activity ...

  4. Android的沉浸式状态栏与变色状态栏详解

    此文章装载至http://www.androidchina.net/3520.html点击打开链接 一. 首先我们得了解什么是透明状态栏以及什么是沉浸式状态栏,以及其区别,国内习惯称透明状态栏为沉浸式 ...

  5. Android:沉浸式状态栏(一)工具类

    参考自Android 沉浸式状态栏完美解决方案 基本功能 状态栏深色或浅色图标切换 自定义状态栏背景 设置沉浸式状态栏 先准备几个工具类 1.SystemBarTintManager package ...

  6. Android 笔记 沉浸式状态栏设置及效果说明

    使用android原生的方法设置setSystemUiVisibility,以下是设置相应的属性和展示效果,以及适合场景: ## 沉浸式状态栏 基于anroid5.0开发适配if (Build.VER ...

  7. Android设置状态栏颜色,沉浸式状态栏 fllutter Android设置沉浸式状态栏

    1. Android原生设置沉浸式状态栏,设置状态栏颜色,字体颜色 import android.annotation.TargetApi; import android.app.Activity; ...

  8. Android 解决沉浸式状态栏和华为虚拟按键冲突

    对于现在的 App 来说,布局页面基本都会用到沉浸式状态栏,单纯的沉浸式状态栏很容易解决,但是在华为手机上存在一个底部虚拟按键的问题,会导致页面底部和顶部出现很大的问题,比如页面底部导航栏被按键覆盖, ...

  9. Android实现沉浸式状态栏效果

    关于沉浸式状态栏,给大家推荐一个非常好的博文android标题栏.状态栏图标文字颜色及背景动态变化 另外说明下,沉浸式状态栏的实现仅适用于 android 4.4及以上版本,4.4以下的就不要想了. ...

最新文章

  1. http传输json文件_python
  2. SQL Server - select语句练习
  3. java8新特性_乐字节-Java8新特性-接口默认方法
  4. MySQL的binlog日志
  5. Boost Asio总结(4) io_service
  6. gearman初探(一、编译和安装)
  7. linux下gpasswd命令
  8. Oracle(一):简介、安装、DDL、DML、JDBC、导入导出
  9. 大数据之-Hadoop之HDFS的API操作_文件IO流_上传_案例---大数据之hadoop工作笔记0063
  10. 自我总结(五)---(学习j2ee)
  11. mysql update case when和where之间的注意事项
  12. 华为android强刷系统下载地址,华为Y511官方rom固件刷机包下载_Y511原版系统强刷升级包...
  13. Android云真机原理以及云真机平台搭建实践
  14. 什么是第三方Cookie?别等生意都丢了,才去了解
  15. 2022年金三银四你应该去面试跳槽吗?
  16. word文档中如何添加目录
  17. 自由运动物体的运动代码
  18. 西安python程序员薪资_最新程序员薪资统计来了!Java均薪16K,Python22k!你拖后腿了吗?...
  19. leetcode276周赛记录(待补充)
  20. 「 机器人学 」“Human-aware机器人导航技术”浅谈

热门文章

  1. java获取中国城市代码 中国城市ID(天气预报可用哦)
  2. 用Excel玩转三维地球!
  3. 前端-个人网页开发最常用的插件Superslide 与 swiper
  4. EDK II编译过程
  5. 使用xpath方法爬取丁香网的评论消息
  6. openfalcon介绍
  7. Java工厂制造生产ERP系统源码springmvcssm+mybatis+mysql
  8. DB2 export 使用Modified by file-mod 方法随笔
  9. 初级JS二维数组小案例
  10. 关于网站图片变形的问题