• 菜单Menu(AS开发实战第四章学习笔记)


    4.5 菜单Menu

    Android的菜单主要分两种,一种是选项菜单OptionMenu,通过按菜单键或点击事件触发,另一种是上下文菜单ContextMenu,通过长按事件触发。页面的布局文件放在res/layout目录下,菜单的布局文件存放在res/menu目录下。

    1.选项菜单OptionMenu

    弹出选项菜单的途径有3种:

    (1)按菜单键

    (2)在代码中手动打开选项菜单,即调用openOptionsMenu方法

    (3)按工具栏右侧的溢出菜单按钮

    实现选项菜单的功能需要重写以下两种方法:

    onCreateOptionsMenu:在页面打开时调用,需要指定菜单列表的XML文件

    onOptionsItemSelected:在列表的菜单项被选中时调用,需要对不同的菜单项做分支处理

    菜单布局文件的代码样例:

    <menu xmlns:android=http://schemas.android.com/apk/res/android>

             <item

                       android:id=”@+id/menu_change_time”

                       android:orderInCategory=”1”

                       android:title=”改变时间”/>

       <item

                       android:id=”@+id/menu_change_color”

                       android:orderInCategory=”8”

                       android:title=”改变颜色”/>

      <item

                       android:id=”@+id/menu_change_bg”

                       android:orderInCategory=”9”

                       android:title=”改变背景”/>

    </menu>

    接下来是使用选项菜单的代码片段:

    @Override

    public Boolean onCreateOptionsMenu(Menu menu){

             getMenuInflater().inflate(R.menu.menu_option, menu);

             return true;

    }

    @Override

    public boolean onOptionsItemSelected(MenuItem item) {

             int id = item.getItemId();

             if(id == R.id.……)……

    else if…… ……

    return true;

    }

    2.上下文菜单ContextMenu

    弹出上下文菜单的途径有两种:

    (1)默认在某个控件被长按时弹出,通常在onStart函数中加入registerForContextMenu方法为指定控件注册上下文菜单,在onStop函数中加入unregisterForContextMenu方法为指定控件注销上下文菜单。

    (2)在除长按事件之外的其他事件中打开上下文菜单,先执行registerForContextMenu方法注册菜单,然后执行openContextMenu方法打开菜单,最后执行unregisterForContextMenu方法注销菜单

    实现上下文菜单的功能需要重写以下两种方法:

    onCreateContextMenu:在此指定菜单列表的XML文件,作为上下文菜单列表项的来源

    onContextItemSelected:在此对不同的菜单项做分支处理

    上下文菜单的布局文件格式同选项菜单,下面是使用上下文菜单的代码片段:
    @Override
    public void onClick(View v) {
       if (v.getId() == R.id.btn_context) {
           registerForContextMenu(v);
           openContextMenu(v);
           unregisterForContextMenu(v);
       }
    }
    @Override
    protected void onResume() {
       registerForContextMenu(tv_context);
       super.onResume();
    }
    @Override
    protected void onPause() {
       unregisterForContextMenu(tv_context);
       super.onPause();
    }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
       getMenuInflater().inflate(R.menu.menu_option, menu);
    }
    @Override
    public boolean onContextItemSelected(MenuItem item) {
       int id = item.getItemId();
       if (id == ……)

       else if(id == ……)

    return true;
    }

  • 相关阅读:
    DateTime.Now.ToString("yyyy/MM/dd") 时间格式化中的MM为什么是大写的?
    新入门PGSQL数据库(尝试利用PGPOOL实现分布式),摘录笔记
    MongoDB入门教程之C#驱动操作实例
    使用MongoDB C#官方驱动操作MongoDB
    【OOAD】OOAD概述
    【OOAD】设计模式概述
    【OOAD】面向对象设计原则概述
    【OOAD】OOP的主要特征
    深入浅出设计模式——访问者模式(Visitor Pattern)
    深入浅出设计模式——模板方法模式(Template Method Pattern)
  • 原文地址:https://www.cnblogs.com/Briddle-ch/p/8479658.html
Copyright © 2020-2023  润新知