文档章节

StatusBar、ActionBar tips

lightUp
 lightUp
发布于 2015/10/18 17:27
字数 658
阅读 282
收藏 4

阿里云携手百名商业领袖、技术大咖,带您一探行进中的数字新基建!>>>

1,StatusBar颜色

1.1 主题设置

在主题(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>
  
    <style name="ActionBar.Solid.GreenStyle" parent="@android:style/Widget.Holo.Light.ActionBar.Solid">
        <item name="android:background">@color/green_accent</item>
    </style>
  
</resources>

将上面的主题应用到Application 或Activity 上, activity的背景色就会填充状态栏 (和底部导航栏,有的话)。


1.2 也可以通过代码设置:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);
    
    //透明状态栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    
    //透明导航栏
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    
    View root = findViewById(R.id.layout_activity_main);
    root.setFitsSystemWindows(true);
    
    ...
    
}


activity_main.xml中 背景色设置为蓝色,所以状态栏和导航栏都是蓝色背景(原本是黑色的):             


2,也可以让某一个view来扩展, 

比如最上面绿色的搜索框 'topBar',其layout 如下:

    ...

    <LinearLayout
        android:fitsSystemWindows="true"
        android:id="@+id/top_bar"
        android:layout_width="match_parent"
        android:layout_height="90dp"
        android:orientation="horizontal"
        android:background="@android:color/holo_green_light"
        android:gravity="center_vertical"
        android:padding="12dp">
        <TextView .../>
        ...
        
    </LinearLayout>
    
   ...


这样设置以后就会有如下的效果:

topBar 原来的padding 全部变为0, 然后上面的padding重新设置为 状态栏的高度,下面的padding重新设置为导航栏的高度,这样最后剩余的空间来存放topBar中原始的content,可以看出原始的content被挤压了,因为topBar的高度是不变的,如果设置的过小,content会显示不全甚至完全不可见。


这种效果显然不可接受, 可以设置底部导航栏为透明,这样topBar背景只扩展至状态栏。

//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//透明导航栏
//getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//非透明导航栏
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);


或者在主题中设置:
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">false</item>

总结:

以上所指的‘视图’必须是与statusBar或底部的系统导航栏紧邻的, 

    1,可以是activity的content view;

     2,也可以是contentView中的某个childView,只要这个view在status bar 下面并且相邻,这时只有statusBar设置透明;

    3,也可以是底部某事childView, 只要这个view在虚拟导航栏上部并且紧邻,这时只有虚拟导航栏设置透明

© 著作权归作者所有

上一篇: volley
下一篇: hook的使用
lightUp
粉丝 10
博文 242
码字总数 287936
作品 0
杭州
程序员
私信 提问
加载中

评论(0)

andorid actionBar

1,actionBar 隐藏 title 和icon 可以通过代码设置也可以通过主题设置,另外如果要用logo代替icon ,需要设置ShowHomeEnabled为true; 2,关于设置CustomView , customview所处的actionBar...

lightUp
2015/10/20
71
0
android状态栏关于开发的几件事

最近手头做了一个新的项目,开发中对状态栏的要求比较多,也作了一些总结,分享给大家。 简答题 全屏、不保留状态栏文字(Splash页面,欢迎页面) 全屏保留状态栏文字(页面上部有Banner图) 标题...

冯剑Wolfman
2018/01/07
0
0
Android如何实现超级棒的沉浸式体验

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由brzhang发表于云+社区专栏 做APP开发的过程中,有很多时候,我们需要实现类似于下面这种沉浸式的体验。 沉浸式体验 一开始...

腾讯云加社区
2018/11/07
0
0
Android ActionBar和ToolBar的使用

参考 1、android中的ActionBar和ToolBar 2、『Material Design入门学习笔记』主题与AppCompatActivity(附demo) 3、Android开发:最详细的 Toolbar 开发实践总结 4、Toolbar设置详解----掉坑...

shzwork
2019/11/11
125
0
ActionBar过期问题

XML报错,什么都没动的时候就这样: 在stackoverflow上找到解决办法: 原文链接:找不到ActionBar(http://stackoverflow.com/questions/33742114/the-following-classes-could-not-be-found-...

byronhs
2016/07/19
23
0

没有更多内容

加载失败,请刷新页面

加载更多

史上最全的“文件或目录损坏且无法读取”的解决办法大集合

问题描述: G盘打不开文件或目录损坏且无法读取,是因为这个I盘的文件系统内部结构损坏导致的。史上最全的“文件或目录损坏且无法读取”的解决办法大集合具体的恢复方法看正文 工具/软件:极...

计算无敌
今天
9
0
2048游戏的最佳算法是什么? - What is the optimal algorithm for the game 2048?

问题: I have recently stumbled upon the game 2048 . 我最近偶然发现了2048游戏。 You merge similar tiles by moving them in any of the four directions to make "bigger" tiles. 您可......

javail
今天
9
0
Spring Cloud Ribbon 客户端负载均衡

Ribbon客户端组件提供一系列完善的配置选项,比如连接超时、重试、重试算法等,内置可插拔、可定制的负载均衡组件。下面是用到的一些负载均衡策略: 简单轮询负载均衡 加权轮询负载均衡 区域...

泥瓦匠BYSocket
今天
7
0
为什么在Python 3中“范围(1000000000000000(1000000000000001))”这么快?

问题: It is my understanding that the range() function, which is actually an object type in Python 3 , generates its contents on the fly, similar to a generator. 据我了解, ra......

技术盛宴
今天
9
0
OSChina 周四乱弹 —— 卖全家桶!

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 @巴拉迪维 :陈慧娴的单曲《与泪抱拥》 陈慧娴的嗓音加上向雪怀的词,这样的经典组合真不多。#今日歌曲推荐# 《与泪抱拥》- 陈慧娴 手机党少年...

小小编辑
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部