android4.4源码下载以下可以实现translucent status bar吗?

今天看啥 热点:
Android 4.4 沉浸式透明状态栏与导航栏,android4.4
Android 系统自4.2 开始 UI 上就没多大改变,4.4 也只是增加了透明状态栏与导航栏的功能,如图
那么现在我就来给大家讲解下如何使用这个新特性,让你的 app 跟随潮流,当然如果你不在乎外观就算了,
使用这个特性能开发出很漂亮的UI,尤其对于 google 原生系统,屏幕下方的导航栏白白占据一块屏幕空间,看起来很不爽
OK废话不多讲,开始讲技术吧,第一种方法,在代码设置:
if(VERSION.SDK_INT &= VERSION_CODES.KITKAT) {
& && && && && && && && && && &&&//透明状态栏
& && && && && && && && && && &&&getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
& && && && && && && && && && &&&//透明导航栏
& && && && && && && && && && &&&getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
& && && && && && && && &}
直接调用上面2行代码可以透明,但是你会发现你的 view 跑到 actionbar 上面去了,很明显 google 的意图是使你的 view 可以占据整个屏幕,然后 状态栏和导航栏 透明覆盖在上面很明显这样不可行。
那有没有办法使你的 view 保持原来大小呢?
有,你需要在这个 activity 的 layout xml 文件添加两个属性
&LinearLayout xmlns:android=&/apk/res/android&
& & android:layout_width=&fill_parent&
& & android:layout_height=&fill_parent&
& & android:gravity=&center_horizontal&
& & android:fitsSystemWindows=&true&
& & android:clipToPadding=&true&
& & android:orientation=&vertical& &
这样状态栏的背景就是你的 activity 的主背景,倘若actionbar 在,将会很难看,如图:
事实证明,google 并没有提供一个比较好的解决方案,他的 透明状态栏与导航栏的应用局限于,全屏阅读文字或玩游戏那种情景,
第二种方式,是是设置 theme 属性
android:theme=&@android:style/Theme.DeviceDefault.Light.NoActionBar.TranslucentDecor&
& && && && &android:theme=&@android:style/Theme.Holo.Light.NoActionBar.TranslucentDecor&
& && && && &android:theme=&@android:style/Theme.Holo.NoActionBar.TranslucentDecor&
如果你使用自定主题,只需在在 values-19 文件添加以下属性:
&style name=&AppBaseTheme& parent=&android:Theme.Holo.Light.DarkActionBar&&
& && &&&&!-- API 19 theme customizations can go here. --&
& && &&&&item name=&android:windowTranslucentStatus&&true&/item&
& && &&&&item name=&android:windowTranslucentNavigation&&true&/item&
& & &/style&
刚刚说了这个使用有局限性,不过好在有一个开源的东西
/jgilfelt/SystemBarTint
使用这个开源库,必须开启透明标题栏
使用这个主题
&style name=&AppBaseTheme& parent=&android:Theme.Holo.Light.DarkActionBar&&
& && &&&&!-- API 19 theme customizations can go here. --&
& && &&&&item name=&android:windowTranslucentStatus&&true&/item&
& && &&&&item name=&android:windowTranslucentNavigation&&true&/item&
& & &/style&
或者在setContentView之前调用这个代码
if(VERSION.SDK_INT &= VERSION_CODES.KITKAT) {
& && && && && && && && && && &&&//透明状态栏
& && && && && && && && && && &&&getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
& && && && && && && && && && &&&//透明导航栏
& && && && && && && && && && &&&getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
& && && && && && && && &}
暂无相关文章
相关搜索:
相关阅读:
相关频道:
Android教程最近更新Android4.4新的特性,在应用内开启透明状态栏和透明虚拟按钮。 - 黑暗中的一盏明灯 - 推酷
Android4.4新的特性,在应用内开启透明状态栏和透明虚拟按钮。 - 黑暗中的一盏明灯
除了沉浸模式外,Android 4.4还有新的API,能使应用内的状态栏和虚拟按钮透明。其他更多的Android 4.4 APIs可以看
如果要使应用内的状态栏和虚拟按钮变成透明有两种方法。
一种是代码方式:
1 Window window = getWindow();
2 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
3 window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
另外一种是使用两个新的主题风格:
但是这种方式只支持Android4.4以上系统,所以为了保持兼容性,我们还是采用代码方式比较好。只需要先判断,如果是4.4以上系统才启用代码。
开启后上下系统栏都透明了。
但是如果应用本身是带有actionbar或者标题栏的话会就会变得比较尴尬,内容会在上面露出来。这个时候需要在布局文件里加入android:fitsSystemWindows=&true&。
1 &RelativeLayout xmlns:android=&/apk/res/android&
android:id=&@+id/layout&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:background=&#c8c8c8& &
android:id=&@+id/listview&
android:layout_width=&match_parent&
android:layout_height=&match_parent& /&
12 &/RelativeLayout&
加入前 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & 加入后
& & & & & & &&
但是这样的话内容就不能从透明的虚拟按钮下穿过,没原来那么好看。我们可以按照以前一样把根布局设置一个高度为系统栏高度和ActionBar高度的内边距就可以。
同时关于获取ActionBar和状态栏的高度,发现用原来的方法有时候会获取的值为0。自己google找了一下,找到两个前辈提供的获取高度方法,
,获取状态栏高度。
1 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);
1 // 获取手机状态栏高度
public int getStatusBarHeight() {
Class&?& c = null;
Object obj = null;
Field field = null;
int x = 0, statusBarHeight = 0;
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 statusBarH
// 获取ActionBar的高度
public int getActionBarHeight() {
TypedValue tv = new TypedValue();
int actionBarHeight = 0;
if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))// 如果资源是存在的、有效的
actionBarHeight = plexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
return actionBarH
设置后的效果
接下来,因为我自己写的一些应用是暗色的主题的,会导致透明的状态栏和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太宽了。
1 &?xml version=&1.0& encoding=&utf-8&?&
2 &shape xmlns:android=&/apk/res/android& &
&gradient android:startColor=&#c8c8c8&
android:endColor=&#3F9FE0&
android:angle=&270&
android:type=&linear&/&
8 &/shape&
已发表评论数()
&&登&&&陆&&
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见使用半透明系统UI扩展Android视图 - 博客 - 伯乐在线
& 使用半透明系统UI扩展Android视图
& 1.7K 阅读
一直以来,Android最大的特点之一就是可以定制UI元素,保持个人应用程序的视觉一致性。
随着Android4.4的发布,谷歌最终去除了应用程序运行时系统UI中的高亮蓝(bright holo blue)效果。这项技术很快将应用于所有的App,但是在你发布下一个版本前,现在就可以利用这项新的半透明系统栏使你的App与众不同。有两种样式可以操作该系统栏:windowTranslucentStatus和windowTranslucentNavigation。
在主题(theme)中设置windowTranslucentStatus为true将填充顶部的状态栏区域。(有虚拟按键的设备上)设置windowTranslucentNavigation为true将填充底部导航栏的区域。这两种样式默认会把应用的内容放到系统栏下面。如果仅仅想扩展背景样式到系统栏下,设置fitsSystemWindows为true会增加视图的Padding值让你的布局恢复正常大小,并且可以把背景扩大。
&resources&
&!-- Base application theme. --&
&style name=&AppTheme& parent=&android:Theme.Holo.Light&&
&item name=&android:windowBackground&&@color/green&/item&
&item name=&android:windowTranslucentStatus&&true&/item&
&item name=&android:windowTranslucentNavigation&&true&/item&
&item name=&android:fitsSystemWindows&&true&/item&
&item name=&android:actionBarStyle&&@style/ActionBar.Solid.GreenStyle&/item&
&style name=&ActionBar.Solid.GreenStyle& parent=&@android:style/Widget.Holo.Light.ActionBar.Solid&&
&item name=&android:background&&@color/green_accent&/item&
&/resources&
下一步要做什么呢?
这就引出了一个重要的关于设计的讨论。可以扩展内容到系统UI并不意味着我们应该这样做。很多情况下,这种风格设计并不合适。如果你把工具栏扩展到状态栏下,这会是一个很糟糕的设计。对于大多数使用action bar的场景来说,一个浮于背景之上的可见action bar作为整个窗口的背景会很突兀。当然,也有例外。
Android行为设计方面的几个哥们,。这个特殊的例子效果很好,真正强调了占据整个屏幕的内容,而且并没有像全屏和沉浸模式一样让导航显得很混乱,
已经写了个辅助系统工具栏着色的,他巧妙地将视图放到系统UI下。如果一些UI内容超出了屏幕的边界,这个库可以轻松的为导航区域着色,除此之外,还可以轻松地把工具栏和系统UI结合起来。即使你不打算着色系统工具栏,看一看Jeff的代码也是相当值得的,可以学习如何手动获取状态栏、工具栏和导航区域的高度。
这几个新的样式可以让你很好地扩展自己的应用视图,比正常的窗口都要大。只需在主题中增加几行代码就可以轻松实现,所以我鼓励大家都尝试一下。
关于作者:
为作者带来更多读者;为读者筛选优质内容;专注IT互联网。
最新评论(期待您也参与评论)
汇集优质的Python技术文章和资源。人生苦短,我用Python!
JavaScript, CSS, HTML5 这里有前端的技术干货!
关注安卓移动开发业界动态,分享技术文章和优秀工具资源。
关注iOS移动开发业界动态,分享技术文章和优秀工具资源。
为作者带来更多读者;为读者筛选优质内容;专注IT互联网。
由数百名译者组成,立志翻译传播优秀的外文技术干货。
一个专门为IT单身男女服务的征婚传播平台。
收录优秀的工具资源,覆盖开发、设计、产品和管理等。
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线博客团队正试图以我们微薄的力量,把优秀的原创/译文分享给读者,做一个小而精的精选博客,为“快餐”添加一些“营养”元素。
欢迎关注更多频道
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选博客文章
– JavaScript, HTML5, CSS
– 专注Android技术分享
– 专注iOS技术分享
– 专注Java技术分享
– 专注Python技术分享
(加好友请注明来意)
网站使用问题
请在询问或者反馈
& 2015 伯乐在线
赞助云主机, 赞助云存储}

我要回帖

更多关于 android4.0 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信