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;
    }

  • 相关阅读:
    git diff
    升级xcode10.0, 终端运行 运行报错:Print: Entry, “:CFBundleIdentifier”, Does Not Exist
    Xcode10.0: NO BUNDLE URL PRESENT
    Xcode10:The operation couldn’t be completed. (DVTCoreSimulatorAdditionsErrorDomain error 0.)
    Xcode 10 Error: Multiple commands produce
    Node.js 中 __dirname 和 ./ 的区别
    aplipay支付-app支付之前后端实现
    容联云短信接口使用
    CryptoJS中WordArray
    react-native布局中的层级问题(zIndex,elevation)
  • 原文地址:https://www.cnblogs.com/Briddle-ch/p/8479658.html
Copyright © 2011-2022 走看看