自定义系统菜单的背景

不多说,上图,见代码。


自定义系统菜单的背景

  1. packagelab.sodino.menutest;
  2. importandroid.content.Context;
  3. importandroid.app.Activity;
  4. importandroid.os.Bundle;
  5. importandroid.os.Handler;
  6. importandroid.util.AttributeSet;
  7. importandroid.view.InflateException;
  8. importandroid.view.LayoutInflater;
  9. importandroid.view.Menu;
  10. importandroid.view.MenuInflater;
  11. importandroid.view.MenuItem;
  12. importandroid.view.View;
  13. importandroid.widget.Toast;
  14. /**
  15. *@authorSodinoE-mail:[email protected]
  16. *@versionTime:2011-1-26下午04:42:04
  17. */
  18. publicclassMenuActextendsActivity{
  19. @Override
  20. publicvoidonCreate(BundlesavedInstanceState){
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. }
  24. publicbooleanonCreateOptionsMenu(Menumenu){
  25. super.onCreateOptionsMenu(menu);
  26. MenuInflaterinflater=newMenuInflater(getApplicationContext());
  27. inflater.inflate(R.menu.menu,menu);
  28. setMenuBackground();
  29. returntrue;
  30. }
  31. publicbooleanonOptionsItemSelected(MenuItemitem){
  32. Stringinfo="";
  33. switch(item.getItemId()){
  34. caseR.id.menu_add:
  35. info="Add";
  36. break;
  37. caseR.id.menu_delete:
  38. info="Delete";
  39. break;
  40. caseR.id.menu_home:
  41. info="Home";
  42. break;
  43. caseR.id.menu_help:
  44. info="Help";
  45. break;
  46. default:
  47. info="NULL";
  48. break;
  49. }
  50. Toasttoast=Toast.makeText(this,info,Toast.LENGTH_SHORT);
  51. toast.show();
  52. returnsuper.onOptionsItemSelected(item);
  53. }
  54. //关键代码为重写Layout.Factory.onCreateView()方法自定义布局
  55. protectedvoidsetMenuBackground(){
  56. MenuAct.this.getLayoutInflater().setFactory(newandroid.view.LayoutInflater.Factory(){
  57. /**
  58. *name-Tagnametobeinflated.<br/>
  59. *context-Thecontexttheviewisbeingcreatedin.<br/>
  60. *attrs-InflationattributesasspecifiedinXMLfile.<br/>
  61. */
  62. publicViewonCreateView(Stringname,Contextcontext,AttributeSetattrs){
  63. //指定自定义inflate的对象
  64. if(name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")){
  65. try{
  66. LayoutInflaterf=getLayoutInflater();
  67. finalViewview=f.createView(name,null,attrs);
  68. newHandler().post(newRunnable(){
  69. publicvoidrun(){
  70. //设置背景图片
  71. view.setBackgroundResource(R.drawable.menu_background);
  72. }
  73. });
  74. returnview;
  75. }catch(InflateExceptione){
  76. e.printStackTrace();
  77. }catch(ClassNotFoundExceptione){
  78. e.printStackTrace();
  79. }
  80. }
  81. returnnull;
  82. }
  83. });
  84. }
  85. }

/res/menu/menu.xml

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <menuxmlns:android="http://schemas.android.com/apk/res/android">
  3. <itemandroid:id="@+id/menu_add"android:title="Add"android:icon="@drawable/menu_add"></item>
  4. <itemandroid:id="@+id/menu_delete"android:title="Delete"android:icon="@drawable/menu_delete"></item>
  5. <itemandroid:id="@+id/menu_home"android:title="Home"android:icon="@drawable/menu_home"></item>
  6. <itemandroid:id="@+id/menu_help"android:title="Help"android:icon="@drawable/menu_help"></item>
  7. </menu>