在Android 2.3状态栏中增加menu,home和back快捷键的方法

之前看了

http://blog.csdn.net/freshui/archive/2010/11/24/6033377.aspx

http://blog.csdn.net/freshui/archive/2010/07/15/5738115.aspx

两篇文章说到如何在Android状态栏中增加menu,home和back快捷键的方法,经过研究发现上面的两篇文章的方法只是对android2.2以前

的版本有用,android2.3的代码和架构发生了不少变化,下面说说如何在在android2.3实现在状态栏中增加menu,home和back快捷键,本文大部分引用上面两篇文章,感谢两篇博文作者提供参考。

 

 1、准备资源,修改XML

准备几张图,这里我们准备添加home backmenu图标,就需要准备6张图,三张普通状态,三张按下的高亮状态图标:

stat_home.png

stat_home_pressed.png

stat_back.png

stat_back_pressed.png

stat_menu.png

stat_menu_pressed.png

把它们放在frameworks/base/packages/SystemUI/res/drawable/目录下

同时,[B]在[/B]frameworks/base/packages/SystemUI/res/drawable 下创建三个imageButtonxml文件

xml_stat_home.xml

 

 

  

 

xml_stat_back.xml                                                                       

     

 

xml_stat_menu.xml                                                                       

 

                                                                    

 

修改status_bar.xml成如下

目录:frameworks/base/packages/SystemUI/res/layout/status_bar.xml

 

 

 

 

 

 

 

 

 

 为按钮添加动态效果

frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarView.java
在类中新增加四个成员(须导入android.widget.ImageButtonandroid.content.Context):

 

 

 

 

增加三个常量:(须导入android.view.KeyEvent;)

 

 

在构造函数StatusBarView中初始化mContext

 

 

  注意mContext=context;”须在”super(context, attrs);”后面,不然编译会报错

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

 

 

buttontouch事件添加如下:

 

 

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

 

需要自己添加Intent
打开frameworks/base/core/java/android/content/Intent.java,增加下面的内容,由于我们的使用的API不公开,须加上/**@hide*/,不然编译会报错

   

      

   

  接收并处理intent
修改StatusBarPolicy.java

目录:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java

   首先在构造函数中加入Intentfilter,注册号这个intentreceiver
filter.addAction(Intent.ACTION_ICONKEY_CHANGED); 
接着在private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() 加入Intentreceiver动作;

  

及处理函数:
须导入以下包
import android.view.IWindowManager;
import android.os.SystemClock;
import android.view.KeyEvent;
 
StatusBar通知栏屏蔽按钮
当拉出expand的通知栏时,按钮的响应非常慢,这时最好将按钮给屏蔽掉,我们在 statusBarView.java中增加两个方法:

 

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

修改文件: statusBarService.java

目录:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarService.java
 
 编译工程(使用的是伟研的WY-S5PV210开发板) 
    #source 
    #/opt/android_froyo_smdk/build/envsetup.sh
#export   TARGET_PRODUCT=full_smdkv210
     #mmm frameworks/base/
   把编译生成的相关文件放进SD卡对应的目录即可,最后的效果如图
   
   

   

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值