前言

qq最近更新搞了渐变式状态栏.然后...新需求就是要加这个.唉

先来张效果图:

常见的方式:

设置Theme,状态栏透明.

true

实现起来比较简单.

几行代码搞定了.

但是.我要泼冷水,这种方式会引起这些问题:

1.软键盘弹起bug

2.fragment不适应

这种方式的优点:

兼容到4.4

我的看法:

1.用全屏模式或者状态栏透明的方式去实现,感觉很勉强

2.为了一个statusbar的效果,然后去处理一大堆不适应,我认为是不值得的.特别是软键盘弹出的问题

3.如果为了适配4.4,要费这么大功夫的话...

我的实现方式:

1.拿到StatusBar:

很简单,翻翻DecorView源码,就能知道,是通过ColorViewState 配置创建的View.

由于是私有成员,要拿到对应的参数,一般做法是使用反射.

这里我取了点巧,既然是View,那么就能findviewbyId找到

只要想办法拿到com.android.internal.R.id.statusBarBackground这个id值就行了

private void initStatusBar() {

if (statusBarView == null) {

//android系统级的资源id得这么拿,不然拿不到

int identifier = getResources().getIdentifier("statusBarBackground","id","android");

statusBarView = getWindow().findViewById(identifier);

}

if (statusBarView != null) {

statusBarView.setBackgroundResource("你的渐变drawable资源id");

}

}

2.等StatusBar绘制完成

如果你直接在onCreate中调用上面的方法,你会发现,拿到的是null.

这是因为Statusbar还没绘制完成.

所以,可以在onCreate()中使用Looper.myQueue().addIdleHandler()来保证Statusbar绘制完成后再findview.

然后对DecorView设置addOnLayoutChangeListener监听

当布局发生变化,就设置statusbar的背景

Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {

@Override

public boolean queueIdle() {

if (isStatusBar()) {

initStatusBar();

getWindow().getDecorView().addOnLayoutChangeListener(new View.OnLayoutChangeListener() {

@Override

public void onLayoutChange(View v,int left,int top,int right,int bottom,int oldLeft,int oldTop,int oldRight,int oldBottom) {

initStatusBar();

}

});

}

return false;

}

});

3.为什么要addOnLayoutChangeListener:

其实不加监听,也能实现改变statusbar颜色的效果..但是会出现问题

比如弹软键盘后,弹popwindow后,引起window状态改变时,statusbar的颜色就会复原...

基本完整的代码

private View statusBarView;

@Override

protected void onCreate(Bundle savedInstanceState) {

//延时加载数据.

Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() {

@Override

public boolean queueIdle() {

if (isStatusBar()) {

initStatusBar();

getWindow().getDecorView().addOnLayoutChangeListener(new View.OnLayoutChangeListener() {

@Override

public void onLayoutChange(View v,int oldBottom) {

initStatusBar();

}

});

}

//只走一次

return false;

}

});

}

private void initStatusBar() {

if (statusBarView == null) {

int identifier = getResources().getIdentifier("statusBarBackground","android");

statusBarView = getWindow().findViewById(identifier);

}

if (statusBarView != null) {

statusBarView.setBackgroundResource("你的渐变drawable资源id");

}

}

protected boolean isStatusBar() {

return true;

}

这种方式的缺点:

1.因为没有使用全屏的模式,所以适配4.4是没戏了.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

android谷歌返色状态栏实例,Android实现状态栏(statusbar)渐变效果的示例相关推荐

  1. android谷歌补丁日期,久违的Android更新补丁:多年前的坑,谷歌终于给填上了

    3月5日消息,近日谷歌在最新的Android安全公告中称,当前更新的补丁CVE-2020-0069已修复联发科芯片设备的安全漏洞.据了解,联发科曾在2016年左右确认,部分搭载联发科芯片的Androi ...

  2. android谷歌dns设置在哪,android系统上DNS的调试

    通过ubuntu等Linux系统都是通过resolve.conf文件进行域名解析的,通过man resolve.conf可以查看到: The resolver is a set of routines ...

  3. Android系统Google Maps开发实例浅析

    Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用. ...

  4. Android获取的状态栏高度,Android中获取状态栏高度的两种方法分享

    前言 最近在做一个关于FAB的功能的时候需要获取状态栏的高度,在网上查了很多种方法,下面是选出的比较合理的两个方法.主要参考stackoverflow的这篇问答:http://stackoverflo ...

  5. android 沉浸式状态栏 19,Android 沉浸式状态栏 以及 伪沉浸式状态栏

    小菜最近在调整页面状态栏的效果,主要包括沉浸式状态栏和伪沉浸状态栏(同事唠嗑给定义的玩的). 前段时间整理过一篇 Android 沉浸式状态栏的多种样式,现在小菜在稍微的补充一下,都是在日常应用中测试 ...

  6. (AS笔记)Android全透明沉浸式主题样式——顶部状态栏+底部导航栏

    目录 1.前言 2.自定义主题theme 3.全透明沉浸式主题theme 4.设置状态栏颜色(Android 5.0+) 5.设置状态栏半透明 6.设置状态栏全透明 7.设置底部导航栏半透明 8.全透 ...

  7. Android APP全屏显示(去掉顶部状态栏和底部虚拟导航栏)以及使用AndroidAutoSize实现自适应

    全屏显示 1.AndroidManifest设置APP样式android:theme,我项目中的Activity都是继承自Activity,如果是继承自AppCompatActivity,这里样式需要 ...

  8. Android沉浸式状态栏(透明系统状态栏)

    Android沉浸式状态栏(透明系统状态栏)的目的:顶部系统状态栏和App的导航栏一体化,不给用户突兀的感觉,使用户把更多的视角留在我们的App上. 沉浸式状态栏的兼容情况 Android版本 透明状 ...

  9. Android 5.0新特性之沉浸式状态栏

    参考资料: http://laobie.github.io/android/2016/03/27/statusbar-util.html http://laobie.github.io/android ...

最新文章

  1. 阿里云服务器部署项目
  2. vue3.0 视频播放插件(vue-vedio-player)
  3. 阿里云服务器如何选配?
  4. 几道题帮你搞定数据选择器
  5. nginx 实现Web应用程序的负载均衡
  6. redis3.0伪集群安装步骤
  7. 信号与信号分解理解总结
  8. 搭建Docker环境---Docker概述
  9. Elasticsearch--入门-_get查询数据 乐观锁字段---全文检索引擎ElasticSearch工作笔记006
  10. input 密码框调出手机的数字键盘
  11. McAfee杀毒软件中的提权漏洞
  12. Python+Dlib库实现人脸合成
  13. UPC10728:Imputation
  14. session_Composite(组合模式)
  15. python表达式3or5的值为_Python表达式10+5%3-True+False的值为____。
  16. 来看看今日的软件分享
  17. 初识HTML(四)进阶:CSS基础、常用属性
  18. 【NOIP2007提高组】矩阵取数游戏
  19. php微信支付需要哪些设置,如何申请和配置微信支付接口?
  20. 俞军跟我聊了三个小时产品(1):用户不是人,是需求的集合

热门文章

  1. 如何正确配置Nginx+PHP
  2. Mybatis Interceptor 讲解
  3. Sublime Text 2/3 配置文件详解
  4. 数据显示:7月份BCH链上交易量较3月份激增逾900%
  5. BCH钱包Electron Cash探索新的众筹模式
  6. CTOR对比Gavin提出的交易排序规则
  7. Resource通配符路径 ——跟我学spring3
  8. 一键控制全屋设备,AI交互时代来临
  9. 转:C#读取Excel文件 (2009年9月28日)
  10. 阿里巴巴公布第二财季报告,净利润同比增长71%