zoukankan      html  css  js  c++  java
  • Android(java)学习笔记139:Android中Menu的使用(静态 和 动态)

    1. 使用xml定义Menu(静态方法

    菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用<menu>标签作为根节点。除了<menu>标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是<item>和<group>。

    (1)<item>标签的属性

    Id:表示菜单项的资源ID

    menuCategory:同种菜单项的种类。该属性可取4个值:container、system、secondary和alternative。通过menuCategroy属性可以控制菜单项的位置。例如将属性设为system,表示该菜单项是系统菜单,应放在其他种类菜单项的后面。

    orderInCategory:同种类菜单的排列顺序。该属性需要设置一个整数值。例如menuCategory属性值都为system的3个菜单项(item1、item2和item3)。将这3个菜单项的orderInCategory属性值设为3、2、1,那么item3会显示在最前面,而item1会显示在最后面。

    title:菜单项标题(菜单项显示的文本)

    titleCondensed:菜单项的短标题。当菜单项标题太长时会显示该属性值

    icon:菜单项图标资源ID

    titleCondensed:菜单项的短标题。当菜单项标题太长时会显示该属性值

    icon:菜单项图标资源ID

    alphabeticShortcut:菜单项的字母快捷键

    numericShortcut:菜单项的数字快捷键

    checkable:表示菜单项是否带复选框。该属性可设计为true或false

    checked:如果菜单项带复选框(checkable属性为true),该属性表示复选框默认状态是否被选中。可设置的值为true或false

    visible:菜单项默认状态是否可视

    enable:菜单项默认状态是否被激活

    showAsAction应用程序目标设为蜂巢平台时,你可以利用Action Bar部件提供的全部功能,将你的选项菜单项放在Action Bar的右上角,对用户来说使用更方便,控制该行为的主菜单项属性是android:showAsAction。这个属性可接受的值有: 

        ifRoom 会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。当然个
    数并不仅仅局限于4个,依据屏幕的宽窄而定
        never 永远不会显示。只会在溢出列表中显示,而且只显示标题,所以在定义item的时候,最好
    把标题都带上。
        always 无论是否溢出,总会显示。
        withText withText值示意Action bar要显示文本标题。Action bar会尽可能的显示这个
    标题,但是,如果图标有效并且受到Action bar空间的限制,文本标题有可
    能显示不全。
       collapseActionView   声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,
    这个操作视窗在默认的情况下是可见的,并且即便在用于不适用的时候,也要占据操作栏的有效空间。
    一般要配合ifRoom一起使用才会有效果。

    (2)<group>标签的属性:

    id:表示菜单组的ID

    menuCategory:与<item>标签的同名属性含义相同。只是作用域为菜单组

    orderInCategory:与<item>标签的同名属性含义相同。只是作用域为菜单组

    checkableBehavior:设置该组所有菜单项上显示的选择组件(CheckBox或Radio Button)。如果将该属性值设为all,显示CheckBox组件;如果设为single,显示Radio Button组件;如果设为none,显示正常的菜单项(不显示任何选择组件)。要注意的是,Android SDK官方文档在解释该属性时有一个笔误,原文是:

    Whether the items are checkable. Valid values: none, all(exclusive/radiobuttons), single(non-exclusive/checkboxes).

    相反了,正确应该是

    all(non-exclusive/checkboxes),single(exclusive/radiobuttons).

    visible:表示当前组中所有菜单项是否显示。该属性可设置的值是true或false

    enable:表示当前组中所有菜单项是否被激活。该属性可设置的值是true或false

    案例如下:

    activity_main.xml:

    <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="com.himi.menudemo1.MainActivity" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
    </RelativeLayout>

    MainActivity.java:

    package com.himi.menudemo1;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
            if (id == R.id.action_settings) {
                return true;
            }
            if (id == R.id.option) {
                Toast.makeText(this, "你点击的是option选项卡", 1).show();
            }
            if (id == R.id.exit) {
                Toast.makeText(this, "你点击的是exit选项卡", 1).show();
            }
            return super.onOptionsItemSelected(item);
        }
    }

    res/menu/main.xml:

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context="com.himi.menudemo1.MainActivity" >
    <!-- android:orderInCategory:item的属性,用来排序的(优先级,值越大优先级越小) -->
        <item
            android:id="@+id/action_settings"
            android:orderInCategory="300"
            android:showAsAction="never"
            android:title="@string/action_settings"/>
        <item
            android:id="@+id/option"
            android:orderInCategory="200"
            android:showAsAction="never"
            android:title="@string/option"/>
        <item
            android:id="@+id/exit"
            android:orderInCategory="100"
            android:showAsAction="never"
            android:title="@string/exit"/>
    
    </menu>

    程序运行结果:

    点击exit

    同理点击option

    2. 动态方法

    我们直接看代码:

    menu.add(groupId, itemId, order, title)

    groupld:代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单按钮。

    itemid:代表的是项目编号。这个参数非常重要,一个item ID对应一个menu中的选项。在后面使用菜单的时候,就靠这个item ID来判断你使用的是哪个选项。

    order:代表的是菜单项的显示顺序。默认是0,表示菜单的显示顺序就是按照add的显示顺序来显示。

    title:表示选项中显示的文字

    MainActivity.java:

    package com.himi.menudemo;
    
    import android.app.Activity;
    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.content.DialogInterface.OnClickListener;
    import android.os.Bundle;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            super.onCreateOptionsMenu(menu);
            menu.add(0,0,0,"关于");
            menu.add(0,1,1,"退出");
            return true ;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            super.onOptionsItemSelected(item);
            int id = item.getItemId();
            switch (id) {
            case 0:
                // new AlertDialog.Builder(this).setTitle("简介")
                // .setIcon(android.R.drawable.ic_dialog_info)
                // .setMessage("从前从前有个人爱你很久,
    但偏偏风渐渐把距离吹得好远,
    "
                // + "好不容易又能再多爱一天,
    但故事的最后你好像还是说了拜拜.")
                // .setPositiveButton("确认", null).show();
                //    
                
                 new AlertDialog.Builder(this).setTitle("简介")
                 .setIcon(android.R.drawable.ic_dialog_info)
                 .setSingleChoiceItems(new String[] {"option0","option1","option2","option3","option4"}, 0, new OnClickListener() {
                    
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "你选择的是选项"+which, 0).show();
                        
                    }
                }).setPositiveButton("确认", null).show();
                break;
    
            case 1:
                finish();
                break;
                
            default:
                break;
            }
            
            
            return true; 
        }
    }

    acitivity_main.xml:

    <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="com.himi.menudemo.MainActivity" >
    
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/hello_world" />
    
    </RelativeLayout>

    程序运行之后点击右上角的菜单,出现的效果如下:

    点击"关于",出现如下效果:

  • 相关阅读:
    yum安装出现Error: Package: glibc-headers-2.17-157.el7.x86_64 (centos7.3)类似报错解决方案
    构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境
    安卓扫描条码二维码功能
    安卓格式化日期
    生成k8s join代码
    Delphi ado连接DBF数据
    README-gitlab
    sqlserver查看哪段时间不存在数据
    delphi强制终止进程
    sqlserver启用通过sql语句远程访问权限
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4760031.html
Copyright © 2011-2022 走看看