当前位置: 首页 > news >正文

StatusBar、ActionBar tips

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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中 背景色设置为蓝色,所以状态栏和导航栏都是蓝色背景(原本是黑色的):             

172323_e701_255456.png


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会显示不全甚至完全不可见。

175715_jx4A_255456.png


这种效果显然不可接受, 可以设置底部导航栏为透明,这样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>

182034_cSHK_255456.png

总结:

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

    1,可以是activity的content view;

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

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

转载于:https://my.oschina.net/u/255456/blog/518616

相关文章:

  • String类:String类的简介和字符串常用接口
  • freemarker遇见的BUG1
  • 棋盘覆盖问题
  • Theano - 导数
  • Windows系统查看并清理缓存
  • 数据结构
  • 本地运行Tachyon(译)
  • springboot(十四):springboot整合shiro-登录认证和权限管理
  • 是反反复复
  • 使用Keil MDK以及标准外设库创建STM32工程
  • Genymotion 插件在 Eclipse 和 Android Studio 中点击后无法初始化 Initialize Engine: failed 解决方法...
  • SQL --max使用
  • 11款开放中文分词引擎大比拼
  • 程序员入行须知
  • Material Design
  • 【译】JS基础算法脚本:字符串结尾
  • [Vue CLI 3] 配置解析之 css.extract
  • [数据结构]链表的实现在PHP中
  • Cookie 在前端中的实践
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • es6(二):字符串的扩展
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • gulp 教程
  • IDEA 插件开发入门教程
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Linux gpio口使用方法
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • React as a UI Runtime(五、列表)
  • windows-nginx-https-本地配置
  • 简析gRPC client 连接管理
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 时间复杂度与空间复杂度分析
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • ​HTTP与HTTPS:网络通信的安全卫士
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (TOJ2804)Even? Odd?
  • (多级缓存)缓存同步
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET单元测试
  • .net的socket示例
  • .NET分布式缓存Memcached从入门到实战
  • .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验
  • .Net中间语言BeforeFieldInit
  • .so文件(linux系统)
  • @ConditionalOnProperty注解使用说明
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析