Android 2.3状态栏中添加menu,home和back快捷键的方.doc_第1页
Android 2.3状态栏中添加menu,home和back快捷键的方.doc_第2页
Android 2.3状态栏中添加menu,home和back快捷键的方.doc_第3页
Android 2.3状态栏中添加menu,home和back快捷键的方.doc_第4页
Android 2.3状态栏中添加menu,home和back快捷键的方.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在Android 2.3状态栏中添加menu,home和back快捷键的方法1、准备资源,修改XML文准备几张图,这里我们准备添加home back和menu图标,就需要准备6张图,三张普通状态,三张按下的高亮状态图标:stat_home.pngstat_home_pressed.pngstat_back.pngstat_back_pressed.pngstat_menu.pngstat_menu_pressed.png把它们放在frameworks/base/packages/SystemUI/res/drawable/目录下同时,在frameworks/base/packages/SystemUI/res/drawable 下创建三个imageButton的xml文件xml_stat_home.xml1. 2. 4. 8. 12. 16. 18. xml_stat_back.xml1. 2. 4. 8. 12. 16. 18. xml_stat_menu.xml1. 2. 4. 8. 12. 16. 18. 修改status_bar.xml成如下目录:frameworks/base/packages/SystemUI/res/layout/status_bar.xml1. 2. 20. 21. 22. 29. 30. 34. 42. 43. 50. 60. 71. 82. 90. 91. 92. 98. 33.143.二 为按钮添加动态效果修改frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarView.java在类中新增加四个成员(须导入android.widget.ImageButton和android.content.Context):1. ImageButtonmHomeBtn;2. ImageButtonmBackBtn;3. ImageButtonmMenuBtn;4. final Context mContext;增加三个常量:(须导入android.view.KeyEvent;)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;在构造函数StatusBarView中初始化mContext1. public StatusBarView(Context context, AttributeSet attrs) 2. super(context, attrs);3. mContext=context;4. 注意”mContext=context;”须在”super(context, attrs);”后面,不然编译会报错在onFinishInflate中,获取几个button 的handler,并设置touch事件,添加如下代码:1. mHomeBtn=(ImageButton)findViewById(R.id.go_home);2. mBackBtn=(ImageButton)findViewById(R.id.go_back);3. mMenuBtn=(ImageButton)findViewById(R.id.pop_menu);4. 5. mHomeBtn.setOnTouchListener(homeOnTouch);6. mBackBtn.setOnTouchListener(backOnTouch);7. mMenuBtn.setOnTouchListener(menuOnTouch);各button的touch事件添加如下:1. voidsendIntent(Intentintent)2. 3. mContext.sendBroadcast(intent);4. 5. privatevoidsendKeyIntent(intkeycode)6. Intentintent=newIntent(Intent.ACTION_ICONKEY_CHANGED);7. intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);8. intent.putExtra(keycode,keycode);9. sendIntent(intent);10. 11. 12. privateOnTouchListenerhomeOnTouch=newOnTouchListener()13. /Override14. publicbooleanonTouch(Viewv,MotionEventevent)15. 16. /TODOAuto-generatedmethodstub17. switch(event.getAction()18. caseMotionEvent.ACTION_UP:19. 20. sendKeyIntent(RESV_KEY_HOME);21. 22. break;23. 24. returnfalse;25. 26. ;27. 28. privateOnTouchListenerbackOnTouch=newOnTouchListener()29. /Override30. publicbooleanonTouch(Viewv,MotionEventevent)31. 32. /TODOAuto-generatedmethodstub33. switch(event.getAction()34. caseMotionEvent.ACTION_UP:35. 36. sendKeyIntent(RESV_KEY_BACK);37. 38. break;39. 40. returnfalse;41. 42. ;43. 44. privateOnTouchListenermenuOnTouch=newOnTouchListener()45. /Override46. publicbooleanonTouch(Viewv,MotionEventevent)47. 48. /TODOAuto-generatedmethodstub49. switch(event.getAction()50. caseMotionEvent.ACTION_UP:51. 52. sendKeyIntent(RESV_KEY_MENU);53. 54. break;55. 56. returnfalse;57. 58. ;为防止点击statusBar上的按钮, 触发标题栏的expend事件, 修改一下函数onInterceptTouchEvent,点击到不属于button区域时才允许解析Motion的event:1. publicbooleanonInterceptTouchEvent(MotionEventevent)2. if(event.getX()mHomeBtn.getRight()3. &(event.getX()mMenuBtn.getLeft()4. returnmSerceptTouchEvent(event)5. ?true:super.onInterceptTouchEvent(event);6. 7. returnfalse;8. /returnmSerceptTouchEvent(event)9. /?true:super.onInterceptTouchEvent(event);10. 11. 需要自己添加Intent打开frameworks/base/core/java/android/content/Intent.java,增加下面的内容,由于我们的使用的API不公开,须加上/*hide*/,不然编译会报错1. /*2. * hide3. */ 4. public static final String ACTION_ICONKEY_CHANGED =ent.action.ICONKEY_CHANGED;5. 接收并处理intent修改StatusBarPolicy.java目录:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarPolicy.java首先在构造函数中加入Intent的filter,注册号这个intent的receiver。filter.addAction(Intent.ACTION_ICONKEY_CHANGED); 接着在private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() 加入Intent的receiver动作;1. elseif(action.equals(Intent.ACTION_ICONKEY_CHANGED)2. Log.d(TAG,ReceivedACTION_ICONKEY_CHANGED);3. updateIconKeyAction(intent);4. 及处理函数:须导入以下包import android.view.IWindowManager;import android.os.SystemClock;import android.view.KeyEvent;1. privatefinalvoidupdateIconKeyAction(Intentintent)2. intkeycode=intent.getIntExtra(keycode,-1);3. IWindowManagerwm=IWindowManager.Stub.asInterface(ServiceManager.getService(window);4. 5. if(keycode!=-1)6. longnow=SystemClock.uptimeMillis();7. 8. KeyEventdown=newKeyEvent(now,now,KeyEvent.ACTION_DOWN,keycode,0);9. KeyEventup=newKeyEvent(now,now,KeyEvent.ACTION_UP,keycode,0);10. 11. try12. wm.injectKeyEvent(down,false);13. catch(RemoteExceptione)14. Log.i(Input,DeadOjbectException);15. 16. 17. try18. wm.injectKeyEvent(up,false);19. catch(RemoteExceptione)20. Log.i(Input,DeadOjbectException);21. 22. 23. StatusBar通知栏屏蔽按钮当拉出expand的通知栏时,按钮的响应非常慢,这时最好将按钮给屏蔽掉,我们在 statusBarView.java中增加两个方法:1. publicvoidhiddenHotIcons()2. mHomeBtn.setVisibility(View.INVISIBLE);3. mBackBtn.setVisibility(View.INVISIBLE);4. mMenuBtn.setVisibility(View.INVISIBLE);5. 6. 7. publicvoidshowHotIcons()8. mHomeBtn.setVisibility(View.VISIBLE);9. mBackBtn.setVisibility(View.VISIBLE);10. mMenuBtn.setVisibility(View.VISIBLE);11. 拉出或收回通知栏中,就可以调用这个函数来显示或隐藏这几个按钮。修改文件: statusBarService.java目录:frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarService.java1. void performExpand() 2. if (SPEW) Slog.d(TAG, performExpand: mExpanded= + mExpanded);3. if (mDisabled & StatusBarManager.DISABLE_EXPAND) != 0) 4. return ;5. 6. if (mExpanded) 7. return;8. 9. mExpanded = true;10. makeExpandedVisible();11. mStatusBarView.hiddenHotIcons();12. updateExpandedViewPos(EXPANDED_FULL_OPEN);13. if (false) postStartTracing();14. 15. void performCollapse() 16. if (SPEW) Slog.d(TAG, performCollapse: mExpanded= + mExpanded17. + mExpandedVisible= + mExpandedVisible18. + mTicking= + mTicking);19. 20. if (!mExpandedVisible) 21. return;22. 23. mExpandedVisible = false;24. visibilityChanged(false);25. mExpandedParams.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;26. mExpandedParams.flags &= WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;27. mExpandedDialog.ge

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论