`
runfeel
  • 浏览: 905713 次
文章分类
社区版块
存档分类
最新评论

向android 的状态栏中加入快捷按钮(home,back,menu等等)的方法(续)

 
阅读更多

上一篇文章中谈到的加入快捷按钮的方法,实际上还是太过麻烦。那篇博客是在我刚接触android源代码没几天时,参考网上的介绍方法,自己看了下源代码尝试着写了一个。 不过那个方法,是我直接用贴图的方法实现了按钮特效,这实在是太浪费了,最近一直仍有朋友问我那篇文章中的问题,我想还是重写一下,用一个更简单点的方法,直接使用android的ImageButton控件,通过其OnTouchListener方法操作即可,Button的高亮与否完全由系统处理,这样也不会出现button高亮不消失的bug。以下方法在android 2.1 上编译调试通过

1。 准备资源,修改XML文件

和上篇文章一样,准备几张图,这里我们准备添加home back和menu图标,就需要准备6张图,三张普通状态,三张按下的高亮状态图标:

stat_home.png

stat_home_pressed.png

stat_back.png

stat_back_pressed.png

stat_menu.png

stat_menu_pressed.png

同时,在 Frameworks/base/core/res/res/drawable下创建三个imageButton的xml文件:

xml_stat_home.xml

xml_stat_back.xml


xml_stat_menu.xml

修改status_bar.xml,如下:

如上篇,修改statusbar的高度,编译一下,即可看到效果。

2。 添加按钮的动作效果

在statusBarView.java中,活的button的handler

类中新增加三个成员:

增加三个常量:

public static final int RESV_KEY_HOME = KeyEvent.KEYCODE_HOME;
public static final int RESV_KEY_BACK = KeyEvent.KEYCODE_BACK;
public static final int RESV_KEY_MENU = KeyEvent.KEYCODE_MENU;;

在onFinishInflate中,获取几个button 的handler,并设置touch事件,添加如下代码:

各button的touch事件添加如下:

也就是简单的广播一个intent消息给statusBarPolicy处理。

为防止点击statusBar上的按钮, 触发标题栏的expend事件, 修改一下函数onInterceptTouchEvent,点击到不属于button区域时才允许解析Motion的event:

修改StatusBarService.java,发送Intent消息需要content,这个目前只能在StatusBarService中添加一个方法:

要发送intent,需要自己添加Intent:

framework/base/core/java/android/content/intent.java中增加

接收并处理intent, 如前篇:

接收并处理intent

这个就要修改StatusBarPolicy.java了

首先,在构造函数中加入Intent的filter,注册号这个intent的receiver。

然后再private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() 加入Intent的receiver动作;

及处理函数:

3. StatusBar通知栏屏蔽按钮

当拉出expand的通知栏时,按钮的响应非常慢,这时最好将按钮给屏蔽掉,我们在 statusBarView.java中增加两个方法:

拉出或收回通知栏中,就可以调用这个函数来显示或隐藏这几个按钮。

修改文件: statusBarService.java

分享到:
评论

相关推荐

    在android的状态栏(statusbar)中增加menu,home和back快捷键的方法

    在android的状态栏(statusbar)中增加menu,home和back快捷键的方法 framework里 修改的

    对在Android的状态栏添加Menu,Back,Home的改进

    对在Android的状态栏添加Menu,Back,Home的改进

    Android statusBar添加back,home,menu按钮

    打包文件中列出在Android 2.3系统的StatusBar上面添加,home,back等按钮所需要的资源文件及其一些代码Patch。

    Android代码-android-dropdown-menu

    android-dropdown-menu An dropdown menu for android, you can attach your own listView(s) with this. 文档 DropdownMenu Demo Usage You can use this to make several(as you want) listViews act like ...

    Android动态显示隐藏底部导航栏

    在Android4.2.2中,导航栏(也就是屏幕底部的三个按钮,home,back,recentapp)是系统应用SystemUi.apk的一部分,简言之,我们的需求就是让我们的app来控制SystemUi.apk,达到动态显示隐藏屏幕底部导航栏的效果。...

    Android监听Home键和Back键的区别介绍

    一:Android 中Home键监听和Back键监听的区别: (1).在Android中,当按下Home键的时候,默认情况下Stop前台的Activity,即Activity设置成停止状态【onStop()】,而不是销毁状态【onDestory()】。如果再次启动该...

    Android Studio记事本工程的add、save、back和delete按钮图标

    Android Studio记事本工程的add、save、back和delete按钮图标,主要应用于activity_main和notepad_item_layout文件中,运行之后点击按钮图标实现简单的记事本增删改查功能,图标正规而且完整,绝对独树一帜。

    Android代码-material-menu

    Morphing Android menu, back, dismiss and check buttons Have full control of the animation: Including in your project compile 'com.balysv.materialmenu:material-menu:2.0.0' Versions up to 2.0 ...

    Fragment中监听back键

    android fragment中监听back键demo

    android知识类讲解

    android开发讲解 在android的状态栏(statusbar)中增加menu,home和back快捷键

    Android中home键和back键区别实例分析

    本文实例分析了Android中home键和back键区别。分享给大家供大家参考。具体如下: back键 Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁...

    back键取代home键

    android开发中的帮助代码,back键取代home键,很有用,很方便。

    Android task和back stack

    当用户触摸在应用启动台中的图标(或一个home屏上的快捷方式)时,应用的任务就来到了前台.如果没有这个应用的已存在的任务(这个应用最近没有被使用),那么一个新的任务被创建并且这个应用的"main"activity被作为栈的...

    Android代码-AndroidSlideBack

    Android Slide Back 一行代码实现滑动返回 > 1、类似于“小米MIX”/“即刻App” 的这种全屏滑动返回 兼容性好,不易出错 > > 2、相比其他类似的侧滑返回的开源库 这个更扩具有扩展性,效率也相对高一些 > > 3、...

    android4.0 移除导航栏

    通过循环KILL掉 com.android.systemui 实现移除系统的导航栏

    Android中监听Home键的4种方法总结

    但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。 看了一下网上的资料,说下面的方法可以。(其实不行) 代码如下: @Override   public void ...

    Android密码锁屏的实现,解决Home,Back问题

    把窗口置于Activity的顶层,如此可以解决Home和Back键的问题。该项目实现了屏保显示系统的时间, 还有一个是密码 锁的功能

    uni-back.zip

    顶部导航栏左边的返回按钮 (from = backbutton) 返回 API,即 uni.navigateBack() (from = navigateBack) 注意事项: 只有在该函数中返回值为 true 时,才表示不执行默认的返回,自行处理此时的业务逻辑。 不返回或...

Global site tag (gtag.js) - Google Analytics