zoukankan      html  css  js  c++  java
  • 菜单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;
    }

  • 相关阅读:
    B站崩溃的背后,b站高可用架构到底是怎么样的?
    批量查询注册表键值函数 RegQueryMultipleValues 应用一例
    windows服务程序的安装和卸载函数
    API 获得GetLastError()错误代码对应的文字信息
    API 在屏幕上简单显示字符串
    API 实现类似于 C# DateTime 的类
    Windows API ReportEvent 写系统日志
    .net core 新增对DOCKER后报 ERR_EMPTY_RESPONSE
    Windows docker 安装报 WSL 2 installation is incomplete.
    SSD固态硬盘装系统无法进入引导
  • 原文地址:https://www.cnblogs.com/Briddle-ch/p/8479658.html
Copyright © 2011-2022 走看看