文档章节

Android4.4新的特性,在应用内开启透明状态栏和透明虚拟按钮。

Kobe_Gong_5
 Kobe_Gong_5
发布于 2015/06/20 00:45
字数 808
阅读 16
收藏 0
点赞 0
评论 0

除了沉浸模式外,Android 4.4还有新的API,能使应用内的状态栏和虚拟按钮透明。其他更多的Android 4.4 APIs可以看这里

如果要使应用内的状态栏和虚拟按钮变成透明有两种方法。

一种是代码方式:

Window window = getWindow(); 
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

另外一种是使用两个新的主题风格:

Theme.Holo.NoActionBar.TranslucentDecorTheme.Holo.Light.NoActionBar.TranslucentDecor

但是这种方式只支持Android4.4以上系统,所以为了保持兼容性,我们还是采用代码方式比较好。只需要先判断,如果是4.4以上系统才启用代码。

开启后上下系统栏都透明了。

但是如果应用本身是带有actionbar或者标题栏的话会就会变得比较尴尬,内容会在上面露出来。这个时候需要在布局文件里加入android:fitsSystemWindows="true"。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/layout"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:background="#c8c8c8" >
<ListView
	android:id="@+id/listview" 
	android:layout_width="match_parent" 
	android:layout_height="match_parent" /> 
</RelativeLayout>

加入前                                                                 加入后

              

但是这样的话内容就不能从透明的虚拟按钮下穿过,没原来那么好看。我们可以按照以前一样把根布局设置一个高度为系统栏高度和ActionBar高度的内边距就可以。

同时关于获取ActionBar和状态栏的高度,发现用原来的方法有时候会获取的值为0。自己google找了一下,找到两个前辈提供的获取高度方法,获取ActionBar高度获取状态栏高度

if (android.os.Build.VERSION.SDK_INT > 18) {
 	Window window = getWindow(); 
 	window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 
 	window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 
 	//设置根布局的内边距
 	RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.layout); 
 	relativeLayout.setPadding(0, getActionBarHeight()+getStatusBarHeight(), 0, 0); 
  }
// 获取手机状态栏高度 
public int getStatusBarHeight() {
	Class<?> c = null; 
	Object obj = null; 
	Field field = null; 
	int x = 0, statusBarHeight = 0; 
	try { 
		c = Class.forName("com.android.internal.R$dimen"); 
		obj = c.newInstance();
		field = c.getField("status_bar_height"); 
 		x = Integer.parseInt(field.get(obj).toString()); 
 		statusBarHeight = getResources().getDimensionPixelSize(x); 
 	} catch (Exception e1) { 
 		e1.printStackTrace(); 
  	} 
  	return statusBarHeight; 
   } 
// 获取ActionBar的高度 
public int getActionBarHeight() { 
   TypedValue tv = new TypedValue(); 
   int actionBarHeight = 0; 
   if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))// 如果资源是存在的、有效的 
   { 
   		actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics()); 
	} 
	return actionBarHeight; 
}

设置后的效果

接下来,因为我自己写的一些应用是暗色的主题的,会导致透明的状态栏和ActionBar颜色不太协调。看到有一些应用是把状态栏的颜色设置成和ActionBar一样,这种解决方法也不错。

具体是怎么实现的也不太清楚,我自己猜测写了一个差不多状态栏。我是直接在根视图加入一个高度为状态栏高度的TextView,背景设置为和ActionBar一样。具体代码如下:

// 创建TextView 
TextView textView = new TextView(this); 
LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, getStatusBarHeight()); 
textView.setBackgroundColor(Color.parseColor("#3F9FE0")); 
textView.setLayoutParams(lParams);
// 获得根视图并把TextView加进去。 
ViewGroup view = (ViewGroup) getWindow().getDecorView(); 
view.addView(textView);

在模拟器上看还行,但是在实际的手机当中总感觉ActionBar有点过大,所以我在背景色里加入了一些渐变,在实体手机中就比较好看一点,不会觉得ActionBar太宽了。

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" > 
	<gradient 
		android:startColor="#c8c8c8" 
		android:endColor="#3F9FE0" 
		android:angle="270" 
		android:type="linear"/> 
</shape>

© 著作权归作者所有

共有 人打赏支持
Kobe_Gong_5
粉丝 2
博文 55
码字总数 43587
作品 0
成都
沉浸屏幕状态栏

现在App都讲究“沉浸”样式,不知道这个词从哪里来的,实质就是状态栏透明。我们do平台打开一个新的页面支持三种状态栏方式 显示状态栏: 也就是状态栏的背景色和前景色都是系统提供的缺省颜色...

voxer
2016/04/23
286
0
android4.4以上透明状态栏简单设置

只要在Activity中的onCreate方法中增加如下代码: if (VERSION.SDKINT >= VERSIONCODES.KITKAT) { // 透明状态栏 getWindow().addFlags( WindowManager.LayoutParams.FLAGTRANSLUCENTSTATUS......

指尖上的开源
2014/10/10
0
0
StatusBar、ActionBar tips

1,StatusBar颜色 1.1 主题设置 在主题(theme)中设置windowTranslucentStatus为true将填充顶部的状态栏区域。(有虚拟按键的设备上)设置windowTranslucentNavigation为true将填充底部导航...

lightUp
2015/10/18
92
0
android各种效果库

可能是最优雅的切换布局的方法 动态切换布局控件 android 实现画板功能 本例详细分析了一个画板功能的实现过程,并讲述了图像混合和双缓冲技术的基本原理。 有关Activity样式 、状态栏透明、...

掘金官方
2017/12/28
0
0
【腾讯Bugly干货分享】浅谈Android自定义锁屏页的发车姿势

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57875330c9da73584b025873 一、为什么需要自定义锁屏页 锁屏作为一种黑白屏时代就存在的手机功...

腾讯Bugly
2016/07/18
57
0
如何适配Android底部虚拟按键

前言 本文章只做一个记录,一个备忘,也为了更好的帮助他人,文章参考地址:Android适配底部虚拟按键的方法 问题说明 项目进行中需要透明渐变的状态栏,全屏显示,当然透明渐变好弄,方法有很...

no白菜
04/13
0
0
Android 手机 开发

转载时请记得标明源地址:http://my.oschina.net/lijindou/blog 1.将系统的状态栏沉浸 getWindow().addFlags(WindowManager.LayoutParams.FLAGTRANSLUCENTSTATUS); //透明导航栏 getWindow(......

紫火晗风
2016/06/02
133
0
Android简单实现系统状态栏设置

github代码直通车 啥也不说了,先上效果图: giphy.gif 设置状态栏透明,通过添加WindowManager.LayoutParams.FLAGTRANSLUCENTSTATUS属性设置。 给状态栏设置颜色: 1.首先调用上面的setTran...

翻滚吧李博
2017/11/23
0
0
苹果 iOS 10 中应当借鉴的十大 Android 特性

据9to5Mac网站报道,即使售价180美元(约合人民币1158元)的第三代MotoG智能手机,尽管比最低端的iOS设备——199美元(约合人民币1281元)的iPodtouch还便宜,其相机也足以与苹果旗舰机型iPhone6...

oschina
2015/12/14
3.3K
24
MeeGo手机UI设计指南

在这个信息高度发达的新移动时代,人们希望他们的终端设备能包含更多的应用,围绕这个对丰富手机应用的追求,一个新的经济正在发展。以设计法则作为我们的核心信条,他驱使我们的每一个讨论都...

红薯
2010/08/21
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CoreText进阶(七)-添加自定义View和对其

CoreText进阶(七)-添加自定义View和对其 其它文章: CoreText 入门(一)-文本绘制 CoreText入门(二)-绘制图片 CoreText进阶(三)-事件处理 CoreText进阶(四)-文字行数限制和显示更多...

aron1992
7分钟前
0
0
Python爬虫 爬取百合网的女人们和男人们

学Python也有段时间了,目前学到了Python的类。个人感觉Python的类不应称之为类,而应称之为数据类型,只是数据类型而已!只是数据类型而已!只是数据类型而已!重要的事情说三篇。 据书上说...

p柯西
19分钟前
0
0
在Java中,你真的会日期转换吗

1.什么是SimpleDateFormat 在java doc对SimpleDateFormat的解释如下: SimpleDateFormatis a concrete class for formatting and parsing dates in a locale-sensitive manner. It allows fo......

Java小铺
27分钟前
0
0
Linux系统梳理---系统搭建(二):tomcat的安装和使用

上一章讲到JDK的安装使用,这一章主要记录下服务器tomcat的安装以及部署一个项目. 1.下载tomcat,这里下载的是apache-tomcat-8.5.32.tar.gz 2.创建文件夹,便于管理,和JDK一样,在usr目录下创建t...

勤奋的蚂蚁
38分钟前
0
0
ES15-聚合

1.Terms Aggregation 分组聚合 2.Filter Aggregation 过滤聚合

贾峰uk
39分钟前
0
0
【2018.07.19学习笔记】【linux高级知识 20.27-20.30】

20.27 分发系统介绍 20.28 expect脚本远程登录 20.29 expect脚本远程执行命令 20.30 expect脚本传递参数

lgsxp
42分钟前
0
0
10.32/10.33 rsync通过服务同步~10.35 screen工具

通过服务的方式同步要编辑配置文件:[root@linux-xl ~]# vim /etc/rsyncd.confport=873log file=/var/log/rsync.logpid file=/var/run/rsyncd.pidaddress=192.168.43.21[tes...

洗香香
45分钟前
0
0
与女儿谈商业模式 (3):沃尔玛的成功模式

分类:与女儿谈商业模式 | 标签: 经济学 沃尔玛 陈志武 2007-05-10 09:09阅读(11279)评论(30) 与女儿谈商业模式 (3):沃尔玛的成功模式 陈志武 /文 沃尔玛(Wal-Mart)是另一个有意思的财...

祖冲之
51分钟前
0
0
网页加载速度优化方法总结

1、减少请求 最大的性能漏洞就是一个页面需要发起几十个网络请求来获取诸如样式表、脚本或者图片这样的资源,这个在相对低带宽和高延迟的移动设备连接上来说影响更严重。 2、整合资源 对开发...

Jack088
57分钟前
0
0
dubbo学习

https://blog.csdn.net/houshaolin/article/details/76408399

喵五郎
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部