Welcome

首页 / 移动开发 / Android / Android编程实现自定义系统菜单背景的方法

本文实例讲述了Android编程实现自定义系统菜单背景的方法。分享给大家供大家参考,具体如下:
不多说,上图,见代码。

package lab.sodino.menutest;import android.content.Context;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.util.AttributeSet;import android.view.InflateException;import android.view.LayoutInflater;import android.view.Menu;import android.view.MenuInflater;import android.view.MenuItem;import android.view.View;import android.widget.Toast;/** * @author Sodino E-mail:sodinoopen@hotmail.com * @version Time:2011-1-26 下午04:42:04 */public class MenuAct extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}public boolean onCreateOptionsMenu(Menu menu) {super.onCreateOptionsMenu(menu);MenuInflater inflater = new MenuInflater(getApplicationContext());inflater.inflate(R.menu.menu, menu);setMenuBackground();return true;}public boolean onOptionsItemSelected(MenuItem item) {String info = "";switch (item.getItemId()) {case R.id.menu_add:info = "Add";break;case R.id.menu_delete:info = "Delete";break;case R.id.menu_home:info = "Home";break;case R.id.menu_help:info = "Help";break;default:info = "NULL";break;}Toast toast = Toast.makeText(this, info, Toast.LENGTH_SHORT);toast.show();return super.onOptionsItemSelected(item);}// 关键代码为重写Layout.Factory.onCreateView()方法自定义布局protected void setMenuBackground() {MenuAct.this.getLayoutInflater().setFactory(new android.view.LayoutInflater.Factory() {/** * name - Tag name to be inflated.<br/> * context - The context the view is being created in.<br/> * attrs - Inflation attributes as specified in XML file.<br/> */public View onCreateView(String name, Context context, AttributeSet attrs) {// 指定自定义inflate的对象if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) {try {LayoutInflater f = getLayoutInflater();final View view = f.createView(name, null, attrs);new Handler().post(new Runnable() {public void run() {// 设置背景图片view.setBackgroundResource(R.drawable.menu_background);}});return view;} catch (InflateException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}}return null;}});}}
/res/menu/menu.xml
<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@+id/menu_add" android:title="Add" android:icon="@drawable/menu_add"></item><item android:id="@+id/menu_delete" android:title="Delete" android:icon="@drawable/menu_delete"></item><item android:id="@+id/menu_home" android:title="Home" android:icon="@drawable/menu_home"></item><item android:id="@+id/menu_help" android:title="Help" android:icon="@drawable/menu_help"></item></menu>
希望本文所述对大家Android程序设计有所帮助。