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

 更新时间:2016年01月06日 16:09:23   作者:Sodino  
这篇文章主要介绍了Android编程实现自定义系统菜单背景的方法,涉及Android菜单menu的实现及背景图片的相关操作技巧,需要的朋友可以参考下

本文实例讲述了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开发中requestfocus()无效的原因及解决办法

    Android开发中requestfocus()无效的原因及解决办法

    这篇文章主要介绍了Android开发中requestfocus()无效的原因及解决办法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • Kotlin Fragment使用方法详解

    Kotlin Fragment使用方法详解

    Fragment是Android3.0后引入的一个新的API,他出现的初衷是为了适应大屏幕的平板电脑, 当然现在他仍然是平板APP UI设计的宠儿,而且我们普通手机开发也会加入这个Fragment, 我们可以把他看成一个小型的Activity,又称Activity片段
    2023-01-01
  • android Handler详细使用方法实例

    android Handler详细使用方法实例

    本文主要介绍Android中Handler的简单使用方法,Handler跟多线程,消息队列联系很紧密,在平常的实际程序开发中比较常见。本文分为4个简单的例子来学校handler
    2013-11-11
  • 详解Android中Handler的使用方法

    详解Android中Handler的使用方法

    这篇文章主要介绍了Android中Handler的使用方法,对Android中Handler的作用于如何使用进行了初步介绍,需要的朋友可以参考下
    2015-12-12
  • 微信网页 第三方登录原理详解

    微信网页 第三方登录原理详解

    本文主要介绍微信网页 第三方登录原理,这里整理了详细的资料及接口说明和参数说明,有需要的小伙伴可以参考下
    2016-09-09
  • Android自定义跑马灯文字效果

    Android自定义跑马灯文字效果

    这篇文章主要为大家详细介绍了Android自定义跑马灯文字效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • Android 通用视频组件开发过程详解

    Android 通用视频组件开发过程详解

    这篇文章主要介绍了Android 通用视频组件开发的详细过程,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • Android Studio 新建项目通过git上传到码云图文教程详解

    Android Studio 新建项目通过git上传到码云图文教程详解

    本文通过图文并茂的方式给大家介绍了Android Studio 新建项目通过git上传到码云的方法,需要的朋友可以参考下
    2017-11-11
  • Android 自定义View之倒计时实例代码

    Android 自定义View之倒计时实例代码

    这篇文章主要介绍了Android 自定义View之倒计时实例代码的相关资料,大多数app在注册的时候,都有一个获取验证码的按钮,点击后,访问接口,最终用户会收到短信验证码。为了不多次写这个获取验证码的接口,下面将它自定义成一个view,方便使用,需要的朋友可以参考下
    2017-04-04
  • Android实现webview实例代码

    Android实现webview实例代码

    本篇文章主要介绍了Android实现webview实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06

最新评论