Android编程实现自定义系统菜单背景的方法

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

不多说,上图,见代码。

Android编程实现自定义系统菜单背景的方法_第1张图片

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:[email protected]
 * @version Time:2011-1-26 下午04:42:04
 */
public class MenuAct extends Activity {
  @Override
  public 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.
* context - The context the view is being created in.
* attrs - Inflation attributes as specified in XML file.
*/ 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



  
  
  
  


希望本文所述对大家Android程序设计有所帮助。

你可能感兴趣的:(Android编程实现自定义系统菜单背景的方法)