zoukankan      html  css  js  c++  java
  • 菜单

        菜单在桌面应用中使用十分广泛,几乎所有的桌面应用都有菜单。菜单在手机应用中的使用减少了不少(主要受到手机屏幕大小制约),但依然有不少手机应用会添加菜单。

         与桌面应用的菜单不同,Android应用中的默认菜单是看不见的,只要当用户单击手机上的"Menu"键时,系统才会显示该应用关联的菜单,这种菜单叫选项菜单(OptionMenu)。

         注意:从Android3.0开始,Android并不要求手机上必须提供Menu键,可能部分Android手机将不再提供Menu按键。在这样的情况下,Android推荐使用ActionBar来代替菜单。

         选项菜单和子菜单(SubMenu)

         Android系统的菜单支持主要通过4个接口来实现,下图显示了Android菜单支持的4个接口。

     

    从上图可以看出,Menu接口只是一个父接口,该接口下有如下两个子接口。

    •  SubMenu:它代表了一个子菜单。可以包含1~N个MenuItem(形成菜单项)。
    • ContextMenu:它代表了一个上下文菜单。可以包含1~N个MenuItem(形成菜单项)。

    Android的不同菜单具有如下特征。

    • 选项菜单(OptionMenu):选项菜单不支持勾选标记,并且只显示菜单的“浓缩(condensed)”标题。
    • 子菜单(SubMenu):不支持菜单项图标,不支持嵌套子菜单。
    • 上下文菜单(ContextMenu):不支持菜单快捷键和图标。

    Menu接口定义了如下方法来添加菜单或菜单项。

    • MenuItem add(int titleRes):添加一个新的菜单项。
    • MenuItem add(int groupId,int itemId,int order,CharSequence title):添加一个新的处于groupId组的菜单项。
    • MenuItem add(int groupId,int itemId,int order,int titleRes):添加一个新的处于groupId组的菜单项。
    • MenuItem add(CharSequence title):添加一个新的菜单项。
    • SubMenu addSubMenu(int titleRes):添加一个新的子菜单。
    • SubMenu addSubMenu(int groupId,int itemId,int order,int titleRes):添加一个新的处于groupId组的子菜单。
    • SubMenu addSubMenu(CharSequence title):添加一个新的子菜单。
    • SubMenu addSubMenu(int groupId,int itemId,int order,CharSequence title):添加一个新的处于groupId组的子菜单。

    上面的方法归纳起来就是两个:add()方法用于添加菜单项;addSubMenu()用于添加子菜单。这些重载方法的区别只是:是否将子菜单、菜单项添加到指定菜单组中,是否使用资源文件中的字符串资源来设置标题。

      SubMenu继承了Menu,它就代表一个子菜单,额外提供了如下常用方法。

    • SubMenu setHeaderIcon(Drawable icon):设置菜单头的图标。
    • SubMenu setHeaderIcon(int iconRes):设置菜单头的图标。
    • SubMenu setHeaderTitle(int titleRes):设置菜单头的标题。
    • SubMenu setHeaderTitle(CharSequence title):设置菜单头的标题。
    • SubMenu setHeaderView(View view):使用View来设置菜单头。

      掌握了上面Menu、SubMenu、MenuItem的用法之后,接下来就可以通过它们来为Android应用添加菜单或子菜单了。添加菜单或子菜单的步骤如下。

         ①重写Activity的onCreateOptionsMenu(Menu menu)的方法,在该方法里调用Menu对象的方法来添加菜单项或子菜单。

         ②如果希望应用程序能响应菜单项的单击事件,重写Activity的onOptionsItemSelected(MenuItem mi)方法即可。

     下面的程序示范了如何为Android应用添加菜单或子菜单。

       该程序的界面布局文件如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <EditText android:id="@+id/txt"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="用于测试的内容"
        android:editable="false"/>
    
    </LinearLayout>

    该Activity的后台代码文件如下:

    package org.crazyit.helloworld;
    
    import android.os.Bundle;
    import android.app.Activity;
    import android.graphics.Color;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.SubMenu;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class MenuTest extends Activity {
        
        //定义字体大小菜单项的标识
        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 FLAIN_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.menu_test);
            edit=(EditText)findViewById(R.id.txt);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            //-------------向menu中添加字体大小的子菜单--------------
            SubMenu fontMenu=menu.addSubMenu("字体大小");
            //设置菜单的图标
            fontMenu.setIcon(R.drawable.font);
            //设置菜单头的图标
            fontMenu.setHeaderIcon(R.drawable.font);
            //设置菜单头的标题
            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,FLAIN_ITEM,0,"普通菜单项");
            //-------------向menu中添加文字颜色的子菜单-----------
            SubMenu colorMenu=menu.addSubMenu("字体颜色");
            colorMenu.setIcon(R.drawable.color);
            //设置菜单头的图标
            colorMenu.setHeaderIcon(R.drawable.color);
           //设置菜单头的标题
            colorMenu.setHeaderTitle("选择文字颜色");
        
            colorMenu.add(0,FONT_RED,0,"红色");
            colorMenu.add(0,FONT_GREEN,0,"绿色");
            colorMenu.add(0,FONT_BLUE,0,"蓝色");
            // Inflate the menu; this adds items to the action bar if it is present.
            //getMenuInflater().inflate(R.menu.menu_test, menu);
            return super.onCreateOptionsMenu(menu);
        }
    
        @Override
        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 FLAIN_ITEM:
                Toast toast=Toast.makeText(MenuTest.this, "您单击了普通菜单项",Toast.LENGTH_SHORT);
                toast.show();
                break;
            }
            // TODO Auto-generated method stub
            return true;
        }
        
    
    }

    上面的程序中粗体字代码就是添加三个菜单的代码,三个菜单中两个是子菜单,而且程序还为子菜单设置了图标、标题等。
    运行上面的程序单击ActionBar程序下方显示的菜单。

    用户单击“字体颜色菜单”将看到系统显示下图所示子菜单。

       由于程序重写了onOptionsItemSelected(MenuItem mi)方法,因此当用户单击指定菜单项时,程序可以为菜单项的单击事件提供响应,由于程序要在onOptionsItemSelectedSelected(MenuItem item)方法中准确判断到底是哪一个菜单项被单击了,因此添加菜单项时通常应为每个菜单项指定ID。

                    

           

  • 相关阅读:
    js扩展Date对象的方法,格式化日期格式(prototype)
    JSP中的普通路径写法
    工作方向与目标
    Cookie工具类(获取cookie,设置cookie)
    读取普通java web项目下的WEB-INF目录下的配置文件(application.xml,xx.properties等配置文件)
    js单选和全选
    exits 和no exits
    Linux配置nginux
    Java读取利用java.util类Properties读取resource下的properties属性文件
    vue-devtools vue调试工具
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3396667.html
Copyright © 2011-2022 走看看