上一篇文章中谈到的加入快捷按钮的方法,实际上还是太过麻烦。那篇博客是在我刚接触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快捷键的方法 framework里 修改的
对在Android的状态栏添加Menu,Back,Home的改进
打包文件中列出在Android 2.3系统的StatusBar上面添加,home,back等按钮所需要的资源文件及其一些代码Patch。
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 ...
在Android4.2.2中,导航栏(也就是屏幕底部的三个按钮,home,back,recentapp)是系统应用SystemUi.apk的一部分,简言之,我们的需求就是让我们的app来控制SystemUi.apk,达到动态显示隐藏屏幕底部导航栏的效果。...
一:Android 中Home键监听和Back键监听的区别: (1).在Android中,当按下Home键的时候,默认情况下Stop前台的Activity,即Activity设置成停止状态【onStop()】,而不是销毁状态【onDestory()】。如果再次启动该...
Android Studio记事本工程的add、save、back和delete按钮图标,主要应用于activity_main和notepad_item_layout文件中,运行之后点击按钮图标实现简单的记事本增删改查功能,图标正规而且完整,绝对独树一帜。
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 ...
android fragment中监听back键demo
android开发讲解 在android的状态栏(statusbar)中增加menu,home和back快捷键
本文实例分析了Android中home键和back键区别。分享给大家供大家参考。具体如下: back键 Android的程序无需刻意的去退出,当你一按下手机的back键的时候,系统会默认调用程序栈中最上层Activity的Destroy()方法来销毁...
android开发中的帮助代码,back键取代home键,很有用,很方便。
当用户触摸在应用启动台中的图标(或一个home屏上的快捷方式)时,应用的任务就来到了前台.如果没有这个应用的已存在的任务(这个应用最近没有被使用),那么一个新的任务被创建并且这个应用的"main"activity被作为栈的...
Android Slide Back 一行代码实现滑动返回 > 1、类似于“小米MIX”/“即刻App” 的这种全屏滑动返回 兼容性好,不易出错 > > 2、相比其他类似的侧滑返回的开源库 这个更扩具有扩展性,效率也相对高一些 > > 3、...
通过循环KILL掉 com.android.systemui 实现移除系统的导航栏
但是发现home不能这样处理,onKeydonwn可以处理菜单键和back键,但home不能。因为home键是系统键,情况特殊一些。 看了一下网上的资料,说下面的方法可以。(其实不行) 代码如下: @Override public void ...
把窗口置于Activity的顶层,如此可以解决Home和Back键的问题。该项目实现了屏保显示系统的时间, 还有一个是密码 锁的功能
顶部导航栏左边的返回按钮 (from = backbutton) 返回 API,即 uni.navigateBack() (from = navigateBack) 注意事项: 只有在该函数中返回值为 true 时,才表示不执行默认的返回,自行处理此时的业务逻辑。 不返回或...