android之OptionMenu

一、现在我给大家介绍两个不同版本的模拟器(2.3.3和4.0.3)

1、布局文件

  (1)打开“res/layout/activity_main.xml”文件。

          先看mian布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

</RelativeLayout>

    (2)打开“res/menu/main.xml”文件。  输入以下代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:id="@+id/connect"  
        android:orderInCategory="100"  
        android:showAsAction="never"  
        android:icon="@android:drawable/ic_menu_send" 
        android:background="#66FFFFFF" 
        android:title="连接" />  
      
    <item android:id="@+id/disconnect"  
        android:orderInCategory="100"  
        android:showAsAction="never"  
        android:icon="@android:drawable/ic_menu_close_clear_cancel"  
        android:title="断开" />  
      
    <item android:id="@+id/search"  
        android:orderInCategory="100"  
        android:showAsAction="never"  
        android:icon="@android:drawable/ic_menu_search"  
        android:title="发现" />  
      
    <item android:id="@+id/view"  
        android:orderInCategory="100"  
        android:showAsAction="never"  
        android:icon="@android:drawable/ic_menu_view"  
        android:title="查看" />  
      
    <item android:id="@+id/help"  
        android:orderInCategory="100"  
        android:showAsAction="never"  
        android:icon="@android:drawable/ic_menu_help"  
        android:title="帮助" />  
      
    <item android:id="@+id/exit"  
        android:orderInCategory="100"  
        android:showAsAction="never"  
        android:icon="@android:drawable/ic_menu_revert"  
        android:title="退出" /> 
         
        </menu>


2、程序文件 

  打开“src/com.genwoxue.optionsmenu/MainActivity.java”文件。

  然后输入以下代码:

package com.example.optionmenu1;


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;
public class MainActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    @Override 
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        MenuInflater inflater = new MenuInflater(getApplicationContext());
        inflater.inflate(R.menu.main, menu);
        setMenuBackground();
        return true;
    }
    public boolean onOptionsItemSelected(MenuItem item) {
        String info = "";
        switch (item.getItemId()) {
        case R.id.connect:
            info = "connect";
            break;
        case R.id.disconnect:
            info = "disconnect";
            break;
        case R.id.exit:
            info = "exit";
            break;
        case R.id.help:
            info = "Help";
            break;
        case R.id.search:
            info = "search";
            break;
        case R.id.view:
            info = "view";
            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() {
        MainActivity.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/>
             */
            @Override 
            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.ic_launcher);
                            }
                        });
                        return view;
                    } catch (InflateException e) {
                        e.printStackTrace();
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                    }
                }
                return null;
            }
        });
    }
}

3、运行结果

(1)2.3.3模拟器运行结果

(2)4.0.3模拟器运行结果

(3)、如果你已经习惯了Android2.x版本的样式,你一定会怀疑是不是搞错了,这是OptionsMenu菜单吗?

  一点不错,Android4.0菜单就变成这个样式了!如果你想要以前2.3.3版本样式,我们在<activity ……></activity>中添加了android:theme="@android:style/Theme"之后,我们再来看一下效果。只是全变成黑色。

如果你想改变menu的背景颜色,你可以去问度娘。。。

补充说明:

  Android4.0及以上版本,更推荐你使用ActionBar和PopupWindow!这样的效果会更好。

 

原文地址:https://www.cnblogs.com/jianrong-zheng/p/3270678.html