`
飞扬云
  • 浏览: 151927 次
  • 来自: 深圳
社区版块
存档分类
最新评论

Android2.2、2.3定制修改状态栏布局、背景、去除状态栏按键、添加状态栏按键

阅读更多

Android2.2、2.3定制修改状态栏,包括修改布局、背景、去除状态栏按键、添加状态栏按键等,涉及到xml文件、java文件和底层库c文件以及图片等。

 

注意:状态栏不属于Launcher,状态栏关系到系统层即Android框架的第三层,而Launcher只是相当于一个应用程序,只涉及到最上层。

 

当修改好状态栏时需要全编译,但Launcher只需要小编译即可。

 

修改前先明白源代码架构,网上很多关于源代码目录结构的介绍,但都是很基础,我想可能是由于目录结构庞大导致无法详细说明每一个包,不过随着研究的深入,肯定会有详细介绍目录的文章,这里先引用网上的一篇介绍源代码目录结构的文章,主

 

要是先了解下:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-5675.html

其实我很想把每个包详细的含义都作一个完整的说明,但需要一个漫长的学习过程。现在首先来学习状态栏的相关修改,这个涉及到frameworks包。这里先用2.2的布局文件来介绍,2.3的目录和这个基本上一样。

 

 

1. 状态栏的布局文件:/frameworks/base/packages/SystemUI/res/layout/status_bar.xml

 

在这个布局文件里修改状态栏的背景,可以把背景设置成图片或者颜色,可以把添加或者删除某个按键等;

 

2. 修改布局后,需要在java文件里添加这个布局,并且创建布局中每个视图的对象,涉及到的java文件是:

 

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarView.java

 

在此文件中,需要声明视图对象,添加、删除监听事件、以及触发事件后的处理方法等。

 

3. 要修改状态栏的高度,需要在/frameworks/base/core/res/res/values/dimens.xml文件中修改。

 

4. 如果添加或者删除了某个按键,系统需要获取这个按键的按键值,涉及到按键值的四个文件是:

 

 

XML文件: /frameworks/base/api/current.xml

java文件: /frameworks/base/core/java/android/view/KeyEvent.java

xml文件:  /frameworks/base/core/res/res/values/attrs.xml

c文件:      /frameworks/base/include/ui/KeycodeLabels.h

 

注意技巧,里面很多的键值都是固定的,所以可以参看他们的方法增加新键的键值。

 

在上面几个文件中只要添加或者删除某个按键对应的按键值就可以了。

 

5. 状态栏涉及到资源图片文件主要在:/frameworks/base/core/res/res/

 

6. 状态栏可以下拉,那么这个下拉界面主要在:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarService.java

 

举例1:假如我们想把状态栏背景变成透明的,那需要在两个地方修改:

a) 打开:/frameworks/base/packages/SystemUI/res/layout/status_bar.xml

 

将第24行的背景改成:

 

android:background="#7f000000"

 

即表示背景透明了。

 

b) 上面XML布局里修改也只能在默认情况下显示透明,但这只是静态修改,还需要在java代码里修改使得动态情况下也变成透明的。

打开:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarService.java

 

找到:

protected void addStatusBarView()

将该方法中得代码:

PixelFormat.RGBX_8888 改成 PixelFormat.TRANSLUCENT


PixelFormat.TRANSLUCENT即表示透明。

 

举例2:我们也可以把下拉界面全屏显示

 

找到方法:void updateExpandedViewPos(int expandedPosition)

 

有一段代码:

 

        mTrackingPosition = mTrackingParams.y = pos; //原来是的坐标

        mTrackingParams.height = disph-h; //原来的高度

 

h表示状态栏的高度,默认情况下不是全屏的,是占据了大半个屏幕。如果要全屏,至少要吧下拉界面的宽度加上一个h,同时把下拉界面向上移动一个h,所以可以改成:

 

        mTrackingPosition =pos;

        mTrackingParams.y = pos-h; //原来的坐标是pos,现在要把下了界面向上移动,那就必须要减去h(注意坐标的方向,详细请参看下面的平面坐标图,请注意和数学里面的几何坐标不一样)

        mTrackingParams.height = disph; // 表明高度等于屏幕的高度

 

 

7. 状态栏里面有一个时钟,它的主要代码在:

 

/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/Clock.java

 

上面只是简单介绍了要修改状态栏所涉及到的主要文件所在的位置,具体修改可以根据客户需求或者产品需求来作。

2
0
分享到:
评论

相关推荐

    百度贴吧5.3.1 android2.1 2.2 2.3 体验最优版 适合老手机使用

    适合早期android 运存低手机使用,在2.1 2.2 2.3 以及4.0 4.1系统有极好体验

    Android2.3 状态栏修改教程

    ### Android2.3状态栏透明修改教程 #### 知识点一:状态栏透明修改方法 **背景介绍:** 在Android开发中,有时为了达到更好的视觉效果或满足特定设计需求,开发者需要对系统的状态栏进行定制化修改。本文将详细...

    android修改状态栏背景颜色、字体颜色,隐藏状态栏,状态栏透明

    本教程将详细讲解如何修改状态栏的背景颜色、字体颜色,如何隐藏状态栏以及如何实现状态栏透明。 1. **修改状态栏背景颜色** 在Android 5.0(API Level 21)及以上版本,我们可以使用`setStatusBarColor()`方法来...

    android沉浸式状态栏 布局可以顶到状态栏上

    在Android开发中,沉浸式状态栏(Immersive Status Bar)是一种设计趋势,它使得应用内容可以延伸到手机屏幕的状态栏区域,提供更沉浸式的用户体验。这种效果常见于全屏游戏或视频播放等应用场景,目的是减少界面...

    Android 2.2/2.3 通用Camera拍照源代码

    在Android平台上,Camera API是开发人员用来实现相机功能的核心接口,尤其在Android 2.2 (Froyo) 和 2.3 (Gingerbread) 版本中,这一接口对于构建拍照应用至关重要。本文将深入探讨这两个版本的相机源代码,帮助...

    Android 解决沉浸式状态栏和华为虚拟按键冲突

    在布局XML文件中,可以通过`android:fitsSystemWindows="true"`属性来自动适应状态栏高度,但需要注意,此属性在某些设备上可能无法处理虚拟按键。 3. **动态设置状态栏透明**:使用`WindowCompat`的`setFlags()`...

    android沉浸状态栏和顶部状态栏背景色的设置

    本文将详细讲解如何在Android中实现沉浸状态栏和顶部状态栏背景色的设置。 首先,我们需要理解Android的状态栏。状态栏位于屏幕顶部,显示系统时间和各种通知图标,通常有一条背景色或透明。在Android 5.0...

    Android内容覆盖透明状态栏下实现全屏模式下带状态栏的效果

    在Android 5.0(Lollipop)之前,状态栏通常是不可定制的,但在之后的版本中,Google引入了`透明状态栏`和`导航栏`的概念,允许开发者自定义这部分的外观。 在Android的样式(style)文件中,可以通过设置以下属性...

    android沉浸式状态栏、变色状态栏、透明状态栏、修改状态栏颜色及透明

    本文将深入探讨如何在Android 4.4(KitKat)及更高版本上实现沉浸式状态栏、变色状态栏、透明状态栏以及如何修改状态栏的颜色和透明度。 1. **Android沉浸式状态栏** Android沉浸式模式主要通过`SYSTEM_UI_FLAG_...

    Android 沉浸式状态栏(亲测好用)

    在Android开发中,沉浸式状态栏(Immersive Status Bar)是一种常见的设计手法,它能够使应用的内容无缝地延伸到状态栏下方,提供更全面、更沉浸的用户体验。这种技术尤其在游戏和全屏应用中非常受欢迎,因为它最大...

    Android 2.2 API中文文档合集

    这份文档集合包含了Android 2.2(API级别8)及部分2.3(API级别9)的详细中文翻译,旨在帮助开发者理解和使用Android平台的各种功能和接口。 首先,Android API文档是开发者进行程序设计的重要参考资料,它详细地...

    Unity显示Android手机状态栏

    总之,通过`AndroidStatusBar.cs`和`AppStatusBar.cs`,开发者可以在Unity中实现对Android状态栏的定制,包括显示、隐藏、透明度和颜色等效果。这不仅提升了用户体验,也展示了Unity与Android原生系统深度集成的可能...

    android 2.2 源代码

    - **自定义修改**:开发者可以根据需求修改系统源码,创建自己的Android ROM或添加特定功能。 - **性能优化**:源码分析有助于找出性能瓶颈并进行优化,提高应用运行效率。 - **学习编程技巧**:Android的源码中充满...

    Android自定义状态栏颜色与应用标题栏颜色一致

    在Android开发中,为了让应用的用户体验更加统一和美观,有时我们需要自定义状态栏的颜色,使其与应用的标题栏颜色保持一致。在iOS系统中,这种效果很常见,但早期的Android版本并不支持这一特性。不过,从Android ...

    Android 状态栏添加图标

    本篇将详细讲解如何在Android状态栏添加和移除图标。 首先,我们需要了解Android的通知系统。Android的通知主要通过`Notification`类来创建,并通过`NotificationManager`来管理和展示。`Notification`类包含了通知...

    RK3568 Android11-动态控制状态栏、导航栏的显示和隐藏

    在Android系统中,状态栏和导航栏是用户界面的重要组成部分,它们提供了系统信息显示和应用程序间的导航功能。在某些应用场景下,比如全屏游戏或沉浸式视频观看时,开发者可能需要动态地控制这些元素的显示与隐藏,...

    Android 2.2下能用的SwitchButton

    标题提到的"Android 2.2下能用的SwitchButton"是指在Android 2.2(API级别8)这个较旧的版本上,开发者通常无法直接使用原生的Switch控件,因为Switch是在Android 4.0(API级别14)及以上版本引入的。描述中提到的...

Global site tag (gtag.js) - Google Analytics