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

所属分类: 软件编程 / Android 阅读数: 1165
收藏 0 赞 0 分享

本文实例讲述了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 {
  @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.<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程序设计有所帮助。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多