Android 自定义系统菜单的背景源码

来源:互联网 发布:网络加密怎么破解密码 编辑:程序博客网 时间:2024/06/03 18:54

Android 自定义系统菜单的背景源码
\

01package lab.sodino.menutest;
02import
03android.content.Context;
04import android.app.Activity;
05import android.os.Bundle;
06import android.os.Handler;
07import android.util.AttributeSet;
08import android.view.InflateException;
09import android.view.LayoutInflater;
10import android.view.Menu;
11import android.view.MenuInflater;
12import android.view.MenuItem;
13import android.view.View;
14import android.widget.Toast;
15/**
16* @author Sodino E-mail:sodinoopen@hotmail.com
17* @version Time:2011-1-26 下午04:42:04
18*/
19public class MenuAct extends Activity {
20@Override
21public void onCreate(Bundle savedInstanceState) {
22super.onCreate(savedInstanceState);
23setContentView(R.layout.main);
24}
25public boolean onCreateOptionsMenu(Menu menu) {
26super.onCreateOptionsMenu(menu);
27MenuInflater inflater = new MenuInflater(getApplicationContext());
28inflater.inflate(R.menu.menu, menu);
29setMenuBackground();
30return true;
31}
32public boolean onOptionsItemSelected(MenuItem item) {
33String info = "";
34switch (item.getItemId()) {
35case R.id.menu_add:
36info = "Add";
37break;
38case R.id.menu_delete:
39info = "Delete";
40break;
41case R.id.menu_home:
42info = "Home";
43break;
44case R.id.menu_help:
45info = "Help";
46break;
47default:
48info = "NULL";
49break;
50}
51Toast toast = Toast.makeText(this, info, Toast.LENGTH_SHORT);
52toast.show();
53return super.onOptionsItemSelected(item);
54}
55// 关键代码为重写Layout.Factory.onCreateView()方法自定义布局
56protected void setMenuBackground() {
57MenuAct.this.getLayoutInflater().setFactory(newandroid.view.LayoutInflater.Factory() {
58/**
59* name - Tag name to be inflated.<br/>
60* context - The context the view is being created in.<br/>
61* attrs - Inflation attributes as specified in XML file.<br/>
62*/
63public View onCreateView(String name, Context context, AttributeSet attrs) {
64// 指定自定义inflate的对象
65if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {
66try {
67LayoutInflater f = getLayoutInflater();
68final View view = f.createView(name, null, attrs);
69new Handler().post(new Runnable() {
70public void run() {
71// 设置背景图片
72view.setBackgroundResource(R.drawable.menu_background);
73}
74});
75return view;
76catch (InflateException e) {
77e.printStackTrace();
78catch (ClassNotFoundException e) {
79e.printStackTrace();
80}
81}
82return null;
83}
84});
85}
86}

  /res/menu/menu.xml

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