Android_(菜单)选项菜单

Android系统中菜单分为Options Menu、Context Menu、Sub Men三种

Options Menu和Context Menu属于一级菜单

Sub Menu属于Options Menu和Context Menu的子菜单

Sub Menu下不能再添加菜单,Android最多只能支持两级菜单

 

选项菜单(Options Menu)在当前Activity中按下菜单键就会显示

Android4.0一下默认在屏幕底部(我也不知道我的为什么默认是在右上角!!!)

常用以下方法使用 选项菜单

 

onCreateOptionsMenu(Menu menu):创建菜单,会在菜单第一次显示时调用。

onPrepareOnptionsMenu(Menu menu): 准备显示菜单,菜单每次显示前调用。

onOptionsItemSelected(MenuItem item):菜单项被选中后处理选中的菜单项。

onMenuOpened(int featureId,Menu menu):菜单被打开的事件。

onOptionsMenuClosed(Menu menu):菜单被关闭的事件。

openOptionsMenu():调用打开菜单

closeOptionsMenu():调用关闭菜单

 

运行截图:

程序结构:

 

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context="com.example.asus.gary_03.MainActivity">


    <EditText
        android:id="@+id/txt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:hint="输入文字"
        android:editable="false"
        android:inputType="textPersonName" />
</LinearLayout>
activity_main.xml

 

package com.example.asus.gary_03;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    //定义字体大小菜单项的标识
    final int FONT_10 = 0x111;
    final int FONT_12 = 0x112;
    final int FONT_14 = 0x113;
    final int FONT_16 = 0x114;
    final int FONT_18 = 0x115;
    //定义普通菜单项的标识
    final int PLAIN_ITEM = 0x11b;
    //定义字体颜色菜单项的标识
    final int FONT_RED = 0x116;
    final int FONT_BLUE = 0x117;
    final int FONT_GREEN = 0x118;
    private EditText edit;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit = (EditText)findViewById(R.id.txt);
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        //向menu中添加字体大小的子菜单
        SubMenu fontMenu = menu.addSubMenu("字体大小");
        //设置菜单的图标
        fontMenu.setIcon(android.R.drawable.btn_plus);
        //设置菜单头的图标
        fontMenu.setHeaderIcon(android.R.drawable.btn_default);
        //设置菜单头的标题
        fontMenu.setHeaderTitle("选择字体大小");
        fontMenu.add(0,FONT_10,0,"10号字体");
        fontMenu.add(0,FONT_12,0,"12号字体");
        fontMenu.add(0,FONT_14,0,"14号字体");
        fontMenu.add(0,FONT_16,0,"16号字体");
        fontMenu.add(0,FONT_18,0,"18号字体");
        //向menu中添加普通菜单项
        menu.add(0,PLAIN_ITEM,0,"普通菜单项");
        //向menu中添加文字颜色的子菜单
        SubMenu colorMenu = menu.addSubMenu("字体的颜色");
        colorMenu.setIcon(android.R.drawable.btn_plus);
        colorMenu.setHeaderIcon(android.R.drawable.btn_default);
        colorMenu.setHeaderTitle("选择文字的颜色");
        colorMenu.add(0,FONT_RED,0,"红色");
        colorMenu.add(0,FONT_GREEN,0,"绿色");
        colorMenu.add(0,FONT_BLUE,0,"蓝色");

        return super.onCreateOptionsMenu(menu);
    }

    public boolean onOptionsItemSelected(MenuItem mi)
    {
        switch(mi.getItemId())
        {
            case FONT_10:
                edit.setTextSize(10*2);
                break;
            case FONT_12:
                edit.setTextSize(12*2);
                break;
            case FONT_14:
                edit.setTextSize(14*2);
                break;
            case FONT_16:
                edit.setTextSize(16*2);
                break;
            case FONT_18:
                edit.setTextSize(18*2);
                break;
            case FONT_RED:
                edit.setTextColor(Color.RED);
                break;
            case FONT_GREEN:
                edit.setTextColor(Color.GREEN);
                break;
            case FONT_BLUE:
                edit.setTextColor(Color.BLUE);
                break;
            case PLAIN_ITEM:
                Toast toast = Toast.makeText(MainActivity.this,"单击普通菜单项",Toast.LENGTH_SHORT);
                toast.show();
                break;
        }
        return true;
    }

}
MainActivity

 

 一、界面布局

  只有一个EditText用来显示测试的内容

 

二、实现程序

 

1、向menu中添加字体大小的子菜单

  fontMenu.setHeaderTitle("选择字体大小");
        fontMenu.add(0,FONT_10,0,"10号字体");
        fontMenu.add(0,FONT_12,0,"12号字体");
        fontMenu.add(0,FONT_14,0,"14号字体");
        fontMenu.add(0,FONT_16,0,"16号字体");
        fontMenu.add(0,FONT_18,0,"18号字体");
        //向menu中添加普通菜单项
        menu.add(0,PLAIN_ITEM,0,"普通菜单项");
        //向menu中添加文字颜色的子菜单
        SubMenu colorMenu = menu.addSubMenu("字体的颜色");
        colorMenu.setIcon(android.R.drawable.btn_plus);
        colorMenu.setHeaderIcon(android.R.drawable.btn_default);
        colorMenu.setHeaderTitle("选择文字的颜色");
        colorMenu.add(0,FONT_RED,0,"红色");
        colorMenu.add(0,FONT_GREEN,0,"绿色");
        colorMenu.add(0,FONT_BLUE,0,"蓝色");

 

2、实现对子菜单项的选择

onOptionsItemSelected(MenuItem item):菜单项被选中后处理选中的菜单项。

public boolean onOptionsItemSelected(MenuItem mi)
    {
        switch(mi.getItemId())
        {
            case FONT_10:
                edit.setTextSize(10*2);
                break;
            case FONT_12:
                edit.setTextSize(12*2);
                break;
            case FONT_14:
                edit.setTextSize(14*2);
                break;
            case FONT_16:
                edit.setTextSize(16*2);
                break;
            case FONT_18:
                edit.setTextSize(18*2);
                break;
            case FONT_RED:
                edit.setTextColor(Color.RED);
                break;
            case FONT_GREEN:
                edit.setTextColor(Color.GREEN);
                break;
            case FONT_BLUE:
                edit.setTextColor(Color.BLUE);
                break;
            case PLAIN_ITEM:
                Toast toast = Toast.makeText(MainActivity.this,"单击普通菜单项",Toast.LENGTH_SHORT);
                toast.show();
                break;
        }
        return true;
    }

 

posted @ 2018-07-08 21:43  Cynical丶Gary  阅读(2468)  评论(0编辑  收藏  举报