Android_上下文菜单两种创建模式

安卓程序设计之基础界面设计button,textview以及线下布局,相对布局等使用 今天我们来学习一些安卓程序设计里的一些基础界面设计,里面用到了线性布局,相对布局,还有一些基础控件button,textview的使用。 首先先上效果图 设计思路:这是一个不太美观但是包含了基本控件和布局的使用。首先我们利用权重1:1将界面分为俩部分,并设置合适边距。然后将上部分设置为线性布局,内容垂直分布,分为上下俩个内容,分别含有textview和相对布局,相对布局里含有一个textview... 阅读详情

上下文菜单

天地之功不可仓促,艰难之业当累日月。 --后汉书

​ 当用户长按某个视图或视图元素后出现的浮动菜单,菜单中所包含的动作是与用户所选择视图元素相关的

Android系统中的两种上下文菜单模式

浮动模式

​ 用户在视图元素上执行一个长点击(按住并保持)事件,上下文菜单项浮动列表会弹出,类似对话框,显示在原有视图的上面,覆盖原有的部分用户界面。用户可以每次在浮动菜单中选择一个可执行动作。

动作模式

  • 这种模式是ActionMode的系统实现,可以在屏幕顶部显示上下文动作条,其中的菜单项是与所选视图元素相关的动作。用户可以在使用上下文菜单的动作条中选择一个或者多个动作。
  • 这种模式只有在Android3.0或者更高版本中可用,是使用上下文菜单的推荐模式。

浮动模式创建步骤

  • 创建弹出菜单配置文件XML

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context="com.example.contextmenu.MainActivity">
        <item
            android:id="@+id/action_AY"
            android:orderInCategory="50"
            android:title="@string/AY"
            app:showAsAction="ifRoom" />
        <item
            android:id="@+id/action_GZ"
            android:orderInCategory="100"
            android:title="@string/GZ"
            app:showAsAction="ifRoom" />
    </menu>
    
  • 添加弹出菜单到对应的View控件上

    im = findViewById(R.id.image);
    
    • 创建上下文菜单

      • 覆盖Activity的onCreateContextMenu()方法

            @Override
            public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                getMenuInflater().inflate(R.menu.menu_main,menu);
                super.onCreateContextMenu(menu, v, menuInfo);
            }
        
        
      • 调用Menu的add()方法添加菜单项(Menulitem)

          menu.add(0,3,0,"玩耍");
                /*
                * 第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单选项
                * 第二个int类型的Item ID参数,代表的是项目编号。这个参数非常重要
                * 第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认0
                * 第三个String类型的title参数,表示的是选项中的显示文字
                * */
        
    • 调用registerForContextMenu()方法为视图注册上下文菜单

         registerForContextMenu(im);
      
  • 定义菜单事件响应

    • 覆盖Activity的onContextItemSelected()来响应事件

       @SuppressLint("NonConstantResourceId")
          @Override
          public boolean onContextItemSelected(@NonNull MenuItem item) {
              switch (item.getItemId()){
                  case R.id.action_AY:
                      im.setImageResource(R.drawable.png1);
                      Toast.makeText(this,"疯狂熬夜中。。。。",Toast.LENGTH_SHORT).show();
                      break;
                  case R.id.action_GZ:
                      im.setImageResource(R.drawable.png2);
                      Toast.makeText(this,"疯狂工作中。。。。",Toast.LENGTH_SHORT).show();
                      break;
                  case 3:
                      im.setImageResource(R.drawable.png0);
                      Toast.makeText(this,"疯狂玩耍中。。。。",Toast.LENGTH_SHORT).show();
                      break;
              }
              return super.onContextItemSelected(item);
          }
      

整个java源码

public class MainActivity extends AppCompatActivity {
    ImageView im;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
		binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
           /*需要绑定的控件*/
         im = findViewById(R.id.image);
            /*注册上下文菜单到控件上*/
         registerForContextMenu(im);
    }

    /*创建上下文菜单*/
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        getMenuInflater().inflate(R.menu.menu_main,menu);
        menu.add(0,3,0,"玩耍");
        /*
        * 第一个int类型的group ID参数,代表的是组概念,你可以将几个菜单项归为一组,以便更好的以组的方式管理你的菜单选项
        * 第二个int类型的Item ID参数,代表的是项目编号。这个参数非常重要
        * 第三个int类型的order ID参数,代表的是菜单项的显示顺序。默认0
        * 第三个String类型的title参数,表示的是选项中的显示文字
        * */
        super.onCreateContextMenu(menu, v, menuInfo);
    }
    
 /*上下文菜单点击事件*/
    @SuppressLint("NonConstantResourceId")
    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()){
            case R.id.action_AY:
                im.setImageResource(R.drawable.png1);
                Toast.makeText(this,"疯狂熬夜中。。。。",Toast.LENGTH_SHORT).show();
                break;
            case R.id.action_GZ:
                im.setImageResource(R.drawable.png2);
                Toast.makeText(this,"疯狂工作中。。。。",Toast.LENGTH_SHORT).show();
                break;
            case 3:
                im.setImageResource(R.drawable.png0);
                Toast.makeText(this,"疯狂玩耍中。。。。",Toast.LENGTH_SHORT).show();
                break;
        }
        return super.onContextItemSelected(item);
    }
}

actionMode创建步骤(动作模式)

  • 创建弹出菜单配置文件XML

    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context="com.example.contextmenu.MainActivity">
        <item
            android:id="@+id/action_AY"
            android:orderInCategory="50"
            android:title="@string/AY"
            android:icon="@drawable/png1"
            app:showAsAction="ifRoom" />
        <item
            android:id="@+id/action_GZ"
            android:orderInCategory="100"
            android:title="@string/GZ"
            android:icon="@drawable/png2"
            app:showAsAction="ifRoom" />
    </menu>
    
  • 添加弹出菜单到对应的View控件上

    findViewById(R.id.image2)
    
    • 创建ActionMode

      private android.view.ActionMode actionMode;

      private ActionMode actionMode;
      
    • 实现Action Mode的callback接口

       final ActionMode.Callback callback = new ActionMode.Callback() {
                  @Override
                  public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
                      actionMode.getMenuInflater().inflate(R.menu.menu_main,menu);
                      return true; //返回值为true
                  }
      
                  @Override
                  public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
                      return false;
                  }
      
                  @Override
                  public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
                      switch (menuItem.getItemId()){
                          case R.id.action_AY:
                              im.setImageResource(R.drawable.png1);
                              Toast.makeText(ContextMenu2.this,"疯狂熬夜中。。。。",Toast.LENGTH_SHORT).show();
                              break;
                          case R.id.action_GZ:
                              im.setImageResource(R.drawable.png2);
                              Toast.makeText(ContextMenu2.this,"疯狂工作中。。。。",Toast.LENGTH_SHORT).show();
                              break;
                      }
                      return true;
                  }
      
                  @Override
                  public void onDestroyActionMode(ActionMode actionMode) {
      
                  }
              };
      
    • 调用setOnlongClickListener()方法为视图注册上下文菜单

       findViewById(R.id.image2).setOnLongClickListener();
      
  • 定义菜单响应事件

    • 设置控件的OnLongClickListener()来响应事件

       findViewById(R.id.image2).setOnLongClickListener(new View.OnLongClickListener() {
                  @Override
                  public boolean onLongClick(View view) {
                      if(actionMode != null){
                          return false;
                      }
                      actionMode = startActionMode(callback);
                      view.setSelected(true);
                      return true;
                  }
              });
      

整个java源码

public class ContextMenu2 extends AppCompatActivity {
    private ActionMode actionMode;
    ImageView im;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        binding = ActivityContextMenu2Binding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        im =findViewById(R.id.image2);

       final ActionMode.Callback callback = new ActionMode.Callback() {
            @Override
            public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
                actionMode.getMenuInflater().inflate(R.menu.menu_main,menu);
                return true; //返回值为true
            }

            @Override
            public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
                return false;
            }

            @Override
            public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
                switch (menuItem.getItemId()){
                    case R.id.action_AY:
                        im.setImageResource(R.drawable.png1);
                        Toast.makeText(ContextMenu2.this,"疯狂熬夜中。。。。",Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.action_GZ:
                        im.setImageResource(R.drawable.png2);
                        Toast.makeText(ContextMenu2.this,"疯狂工作中。。。。",Toast.LENGTH_SHORT).show();
                        break;
                }
                return true;
            }

            @Override
            public void onDestroyActionMode(ActionMode actionMode) {

            }
        };

        findViewById(R.id.image2).setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                if(actionMode != null){
                    return false;
                }
                actionMode = startActionMode(callback);
                view.setSelected(true);
                return true;
            }
        });



    }
}
上下文菜单与上下文操作模式 android中上下文菜单与上下文操作模式的简介与使用 立即下载

相关推荐

Android多种菜单样式的代码例子

Android多种菜单样式的代码例子。用于演示选项菜单OptionsMenu、上下文菜单ContextMenu,以及使用弹窗控件PopupWindow来自定义菜单的功能。

android创建上下文菜单(即长按菜单)

一、实现长安菜单的步骤 1、调用方法 registerForContextMenu() 把view向系统注册上下文菜单。 2、使用onCreateContextMenu()创建菜单。 3、使用onContextItemSelected()实现菜单的点击事件。

longyi_java的专栏 1348

android 选项菜单和上下文菜单

android studio写的选项菜单和上下文菜单,在同一个项目中了

Android入门之两种方法实现选项菜单和上下文菜单的创建(一)

Android入门之两种方法实现选项菜单和上下文菜单的创建(一)

派大星子的博客 2133

创建上下文菜单

创建上下文菜单

瑞芯微RK3576上手实测:8nm新U配6TOPS NPU,做AIoT项目选它还是RK3588/RK3568?

本文深度评测瑞芯微RK3576芯片在中高端AIoT项目中的表现,对比RK3588和RK3568的性能差异。RK3576采用8nm工艺,配备6TOPS NPU,在解码能力、AI推理效率和功耗控制方面表现均衡,是中端项目的黄金选择。实测数据显示其在多路视频解码和AI加速性能上优势明显,特别适合智能摄像头和工业HMI设备。

weixin_42627853的博客 717

Android Studio中上下文菜单的使用

上下文菜单指的是根据点击的位置来判断弹出什么样的菜单,例如在Android Studio的文件夹上长按弹出的菜单(图1)与某个app图标上长按弹出的菜单(图2)不同。 图1 文件夹上长按弹出的菜单 图2 app图标上长按弹出的菜单 使用上下文菜单主要分为三个步骤,第一步是创建上下文菜单;第二步是注册上下文菜单;第三步是为上下文菜单创建响应。 1 创建上下文菜单 创建上下文菜单分为两个步骤,一是通过XML文件创建菜单,二是将XML实例化为Menu类的对象。 1.1通过XML文件创建..

hou09tian的博客 4364

ModbusRTU串口读写报文解析

解析MODBUS报文的格式,讨论异常状态、读多个寄存器与写多个寄存器

Serendipitor的博客 9212

android布局中上下对齐,android – 如何使用相对布局垂直对齐列表中的项?

编辑后评论:事实证明,使用RelativeLayout进行这项工作并不容易.在答案的底部我已经包含了一个RelativeLayout,它提供了所需的效果,但只有在它包含在ListView中之后.之后,出现了问题中描述的相同问题.这是通过使用LinearLayout(s)来修复的.android:layout_width="wrap_content"android:layout_height="wr...

weixin_35452394的博客 296

OpenClaw进行安全测试(附使用场景案例)

test-master 是一个全面的测试专家,覆盖功能测试、性能测试、安全测试三大领域。这里我们重点来看下使用test-master如何进行安全测试。使用 test-master 时,可以针对以下高频领域进行专项安全扫描:✅ OWASP Top 10 测试✅ SQL 注入测试✅ XSS 测试✅ CSRF 测试✅ 认证 / 授权测试。

十二测试录 331

Android 三种菜单讲解(Menus )

创建上下文菜单 上下文菜单提供了影响指定项目或UI中内容结构的动作。你能够给任何View对象提供一个内容菜单,但是它们最常用于ListView、GridView或集合类型的View对象的项目中,用户能够执行每个项目上的动作。 有两个方法来提供上下文动作: 1.  在一个浮动的内容菜单中提供上下文动作。当用户在一个声明支持上下文菜单的View对象上长按(long-click)时,会显示一个浮动

蚁人日记 1312

GeoServer下载与安装(详细图文教程)

GeoServer官方版可以方便的发布地图数据,允许用户对特征数据进行更新、删除、插入操作,通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。

大剑师兰特的GIS世界 3276

Creating Contextual Menus创建上下文菜单

A contextual menu offers actions that affect a specific item or context frame in the UI. You can provide a context menu for any view, but they are most often used for items in a ListView, GridView,

fancychendong的专栏 1846

080、多轴运动控制:插补器设计(螺旋线插补)

本文分享了螺旋线插补器设计的实战经验。针对五轴点胶机Z轴抖动问题,作者分析了螺旋线数学本质,提出基于归一化时间参数的速度规划方法,强调各轴严格同步的重要性。文章详细介绍了速度分解、加减速处理、嵌入式优化技巧(查表法、定点化),并总结了起点闭合、速度波动、数值处理等常见问题解决方案。最后给出5条实用建议:注重速度规划而非纯数学推导、预先仿真、保留调试接口、考虑机械谐振、防范编码器丢脉冲。通过优化插补周期、电子齿轮比和S形速度曲线,成功将设备良率从60%提升至95%。

m0_50546716的博客 86

【ESP32接入国产大模型之Deepseek】

🥳🥳🥳现在,我们在本教程中,您学习了如何使用ESP32接入语言大模型之Deepseek。🛹🛹🛹从而实现对外部世界进行感知,充分认识这个有机与无机的环境,后期会持续分享esp32跑freertos实用案列🥳🥳🥳科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣如果你有任何问题,可以通过q group(945348278)加入鹏鹏小分队,期待与你思维的碰撞😘😘😘鸣谢B站UP星汇极客ESP32对接DeepSeek API,实现AI大模型交互功能。

vor234的博客 1万+

Android 用户界面---菜单(Menus 二)

From: http://blog.youkuaiyun.com/think_soft/article/details/7350177 创建上下文菜单 上下文菜单提供了影响指定项目或UI中内容结构的动作。你能够给任何View对象提供一个内容菜单,但是它们最常用于ListView、GridView或集合类型的View对象的项目中,用户能够执行每个项目上的动作。 有两个方法来提供上下文动作: 1.  在一

fyfcauc的专栏 689

【S32K3 MCAL配置】-4.1-CAN Driver:如何解决CAN帧发送丢帧问题

【S32K3 MCAL配置】-4.1-CAN Driver:如何解决CAN帧发送丢帧问题

「汽车电子助手」的博客 1442

【Android 开发】:UI控件之 Menu 菜单的的使用(三)

上一讲我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下文菜单] 这一讲我们来讲解创建上下文菜单的第二种使用方式:Using the contextual action mode [使用上下文动作模式] 未完待续,持续更新中.......

AHuier_Techblog :如果我不在写代码,你就 @me 3380

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Android API Guides——User Interface

Menus Creating Contextual Menus 2 ways: 1. floating context menu   2.contexual action mode.  对比如图: floating context menu:   1.找到view  ->  registerForContextMenu()   2. onCreateContextMenu()

smfwuxiao的专栏 2478

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

listview上下文菜单_Android ListView上下文菜单:ActionMode.CallBack

listview上下文菜单 在这篇文章中,我们要分析上下文菜单 ( contextual action bar )。 这是与特定项目相关的菜单。 上下文菜单几乎可以应用于所有视图,但通常与ListView一起使用 。 我们谈论了很多列表视图,因为它是最重要的组件之一。 我们可以区分两种不同类型的上下文菜单: 浮动菜单 上下文动作模式(ActionMode) 浮动菜单用于低于3....

602

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Android上下文菜单

安卓上下文菜单与选项菜单方法基本相似,因为ContextMenu继承了Menu,因此程序可以用相同的方法为它添加菜单项,开发上下文菜单需要重写 onCreateContextMenu(ContextMenu menu,View source,ContextMenu.ContextMenuInfo menuInfo)方法 调用Activity的registerForContextMenu(Vie

1014

Android菜单创建和使用

Menu分类: 1.选项菜单(OptionMenu) 选项菜单是一个应用的主菜单项,用于放置对应用产生全局影响的操作。 2.上下文菜单(ContextMenu) 3.弹出菜单(PopupMenu)

weixin_65838109的博客 4009
上一篇: Android_ 弹出菜单创建
下一篇: Android_菜单组
ColdKite_鸢
博客等级 码龄7年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ColdKite_鸢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值