StatusBar、ActionBar tips

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在虚拟导航栏上部并且紧邻,这时只有虚拟导航栏设置透明

时间: 2024-10-13 15:45:56

StatusBar、ActionBar tips的相关文章

iOS基础——通过案例学知识之LaunchScreen、APPIcon、StatusBar、UIScrollView、UIPageControl

iOS基础--通过案例学知识之LaunchScreen.APPIcon.StatusBar.UIScrollView.UIPageControl 今天要实现的案例效果图 一.LaunchScreen 1.设置程序的LaunchScreen 在项目配置文件中配置启动页,并且在LaunchScreen.storyboard中进行布局 2.设置LaunchScreen时间 //单位:秒 [NSThread sleepForTimeInterval:1.5f]; 二.APPIcon 1.命名规则:iOS

用代码打开通知中心(statusbar、通知栏、消息中心)

我想用代码来打开android的消息中心,也叫做statusbar.通知栏.通知栏其实就是一个常驻的服务,至于原理这里就不多说了,简单说下思路和问题. 思路:API中没有实现的方法,那么就利用反射机制 问题:4.2系统中的方法变更 解决办法:分系统实现不同的方法 源码路径:……\sdk\sources\android-18\android\app\StatusBarManager 我们先来看android 4.4(API 19)中的方法,android 4.3(API 18),android 4

Android应用:StatusBar状态栏、NavigationBar虚拟按键栏、ActionBar标题栏、Window屏幕内容区域等的宽高

一.屏幕中各种栏目以及屏幕的尺寸 当我们需要计算屏幕中一些元素的高度时,或许需要先获取到屏幕或者各种栏目的高度,下面这个类包含了Status bar状态栏,Navigation bar虚拟按键栏,Action bar标题栏, Window屏幕内容等的宽高的计算,可以带来极大的方便. 因为我在代码中做了比较详尽的注释,在这里不再多阐述,以下是代码: 1 /** 2 * 这个类描述了当前设备的配置中system bar的尺寸(StatusBar状态栏,NavigationBar虚拟按键栏,Actio

Android获取状态栏、标题栏、ActionBar以及屏幕的高度

一.屏幕高度和宽度获取方法 int screenWidth,screenHeight; WindowManager windowManager = getWindowManager(); Display display = windowManager.getDefaultDisplay(); screenWidth = display.getWidth(); screenHeight = display.getHeight(); 另外一种 DisplayMetrics dm = new Disp

Android ActionBarDrawerToggle、DrawerLayout、ActionBar 结合

ActionBarDrawerToggle是一个开关.用于打开/关闭DrawerLayout抽屉 ActionBarDrawerToggle 提供了一个方便的方式来配合DrawerLayout和ActionBar.以实现推荐的抽屉功能. 即点击ActionBar的homebutton,就可以弹出DrawerLayout抽屉. 在Activity中的两个回调函数中使用它: onConfigurationChanged onOptionsItemSelected 调用ActionBarDrawerT

Statusbar、Menubar、Toolbar合集

In the last example of this section, we create a menubar, a toolbar and a statusbar. We also create a central widget. #!/usr/bin/python # -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial This program creates a skeleton of a classic GUI appl

Android ActionBar的基本用法

本文翻译了这篇文章:Using the Android action bar (ActionBar) - Tutorial 1.ActionBar的简介ActionBar位于Activity的顶部,可用来显示activity的标题.Icon.Actions和一些用于交互的View.它也可被用于应用的导航.ActionBar 是在Android 3.0(API 11)中加入到SK中的,想在低版本中使用ActionBar有两种选择:使用http://actionbarsherlock.com 或使用

android 状态栏(StatusBar)

一.SystemUI 概述 自 android2.2 开始 , 原本存在与 framework-res.apk 中的状态栏和下拉通知栏界面控制被分割出一个单独的 apk 文件 , 命名为 SystemUI.apk, 保存在 System/app 文件夹中.在 SystemUI.apk 中 , 是存在着状态栏的图标 ,XML 和控制文件等 , 这样的分割 , 使我们可以更方便地去修改. SystemUI 模块中主要包含了 USB 和 Statusbar 两个子模块,本文将以 Statusbar 为

ActionBar使用

在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果. 一.添加ActionBar 1.不需要导入ActionBar,因为在android3.0或者以上版本中,ActionBar已经默认的包含在Activity中2.在Android3.0的默认主题“holographic”中,已经创造了ActionBar3.当android:minSdkVersion 或者 an