android谷歌返色状态栏实例,Android实现状态栏(statusbar)渐变效果的示例
前言
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)渐变效果的示例相关推荐
- android谷歌补丁日期,久违的Android更新补丁:多年前的坑,谷歌终于给填上了
3月5日消息,近日谷歌在最新的Android安全公告中称,当前更新的补丁CVE-2020-0069已修复联发科芯片设备的安全漏洞.据了解,联发科曾在2016年左右确认,部分搭载联发科芯片的Androi ...
- android谷歌dns设置在哪,android系统上DNS的调试
通过ubuntu等Linux系统都是通过resolve.conf文件进行域名解析的,通过man resolve.conf可以查看到: The resolver is a set of routines ...
- Android系统Google Maps开发实例浅析
Google Map(谷歌地图)是Google公司提供的电子地图服务.包括了三种视图:矢量地图.卫星图片.地形地图.对于Android系统来说,可以利用Google提供的地图服务来开发自己的一些应用. ...
- Android获取的状态栏高度,Android中获取状态栏高度的两种方法分享
前言 最近在做一个关于FAB的功能的时候需要获取状态栏的高度,在网上查了很多种方法,下面是选出的比较合理的两个方法.主要参考stackoverflow的这篇问答:http://stackoverflo ...
- android 沉浸式状态栏 19,Android 沉浸式状态栏 以及 伪沉浸式状态栏
小菜最近在调整页面状态栏的效果,主要包括沉浸式状态栏和伪沉浸状态栏(同事唠嗑给定义的玩的). 前段时间整理过一篇 Android 沉浸式状态栏的多种样式,现在小菜在稍微的补充一下,都是在日常应用中测试 ...
- (AS笔记)Android全透明沉浸式主题样式——顶部状态栏+底部导航栏
目录 1.前言 2.自定义主题theme 3.全透明沉浸式主题theme 4.设置状态栏颜色(Android 5.0+) 5.设置状态栏半透明 6.设置状态栏全透明 7.设置底部导航栏半透明 8.全透 ...
- Android APP全屏显示(去掉顶部状态栏和底部虚拟导航栏)以及使用AndroidAutoSize实现自适应
全屏显示 1.AndroidManifest设置APP样式android:theme,我项目中的Activity都是继承自Activity,如果是继承自AppCompatActivity,这里样式需要 ...
- Android沉浸式状态栏(透明系统状态栏)
Android沉浸式状态栏(透明系统状态栏)的目的:顶部系统状态栏和App的导航栏一体化,不给用户突兀的感觉,使用户把更多的视角留在我们的App上. 沉浸式状态栏的兼容情况 Android版本 透明状 ...
- Android 5.0新特性之沉浸式状态栏
参考资料: http://laobie.github.io/android/2016/03/27/statusbar-util.html http://laobie.github.io/android ...
最新文章
- 阿里云服务器部署项目
- vue3.0 视频播放插件(vue-vedio-player)
- 阿里云服务器如何选配?
- 几道题帮你搞定数据选择器
- nginx 实现Web应用程序的负载均衡
- redis3.0伪集群安装步骤
- 信号与信号分解理解总结
- 搭建Docker环境---Docker概述
- Elasticsearch--入门-_get查询数据 乐观锁字段---全文检索引擎ElasticSearch工作笔记006
- input 密码框调出手机的数字键盘
- McAfee杀毒软件中的提权漏洞
- Python+Dlib库实现人脸合成
- UPC10728:Imputation
- session_Composite(组合模式)
- python表达式3or5的值为_Python表达式10+5%3-True+False的值为____。
- 来看看今日的软件分享
- 初识HTML(四)进阶:CSS基础、常用属性
- 【NOIP2007提高组】矩阵取数游戏
- php微信支付需要哪些设置,如何申请和配置微信支付接口?
- 俞军跟我聊了三个小时产品(1):用户不是人,是需求的集合