• 【转】 Pro Android学习笔记(三二):Menu(3):Context菜单


    目录(?)[-]

    1. 什么是Context menu
    2. 注册View带有Context menu
    3. 填Context菜单内容
    4. Context菜单点击触发

    什么是Context menu

    在桌面电脑,我们都很熟悉Context menu,按鼠标右键显示的菜单就是context菜单。在Android中,通过长时间鼠标按键可以触发context菜单。对于触屏设备,手指长按就是长鼠标按键事件。

    一个activity有一个且只能有一个OptionMenu,一个view可以有一个且最多只能有一个ContextMenu。检查鼠标长按是基于view来监听。因此一个activity中可有多少个view,就可以有多少个ContextMenu。

    注册View带有Context menu

    如果某个view带有Context menu,需要先在onCreate()中注册,代码如下

    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.pure_text); 
        //小例子中只有一个全屏的TextView 
        infoTv = (TextView)findViewById(R.id.pureInfo); 
        //【步骤1】:在onCreate()中为view注册context菜单
        registerForContextMenu
    (infoTv); 

    填Context菜单内容

    注册之后,我们要具体编写菜单项,将重写onCreateContextMenu(),例子代码如下:

    private static int TV_CONTEXTMENU_BASE =  1000;
    //第一个参数是预构的ContextMenu对象,第二个参数是所注册的view,第三个参数一般我们不使用,但是有时view需要需要通过该参数传递信息。ContextMenuInfo是接口,实现的类有AdapterContextMenuInfo和ExpandableContextMenu。如果传递的信息和cursor有关,可以使用AdapterContextMenuInfo来传递rowId。
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
        super.onCreateContextMenu(menu, v, menuInfo); 
       //设置标题图标和标题,并添加两个菜单项 
        menu.setHeaderIcon(R.drawable.leaf); 
        menu.setHeaderTitle("Context Menu :"); 
        menu.add(Menu.NONETV_CONTEXTMENU_BASE,TV_CONTEXTMENU_BASE, "item.1");
        menu.add(Menu.NONETV_CONTEXTMENU_BASE + 1,TV_CONTEXTMENU_BASE + 1,"item.2"); 

       //子菜单嵌套测试 
        SubMenu subMenu = menu.addSubMenu("子菜单"); 
        subMenu.setHeaderIcon(R.drawable.clock); 
        subMenu.add(Menu.NONE,TV_CONTEXTMENU_BASE + 100, + TV_CONTEXTMENU_BASE + 100,"sub.1");
        subMenu.add(Menu.NONE,TV_CONTEXTMENU_BASE + 101, + TV_CONTEXTMENU_BASE + 101,"sub.2");

    ContextMenu和OptionMenu在初始化中是有区别的,OptionMenu是在Activity创建时进行的,而ContextMenu则是每次长按鼠标事件时触发的。对于同一个view,每次长按键都会调用onCreateContextMenu()。经过跟踪,每次返回新的ContextMenu对象,也就是ContextMenu是实时创建的,这点要注意。

    Context菜单点击触发

    ContextMenu是Menu接口的实现,触发机制非常相似。例子代码如下:

    @Override 
    public boolean onContextItemSelected(MenuItem item) {  
        if(item.getItemId() == TV_CONTEXTMENU_BASE){ 
            showInfo("item.1 was clicked "); 
        }else{ 
            showInfo("ItemId " + item.getItemId() + " has nothing done");
        } 
        return super.onContextItemSelected(item); 

    本博文涉及的例子代码,可以在Pro Android学习:Menu中下载。

    相关链接: 我的Android开发相关文章

  • 相关阅读:
    mybatis:mybatis再总结
    shiro:RememberMe
    shiro:session管理
    shiro:缓存管理
    shiro:授权管理
    shiro:密码加密(加密、加盐加密)
    spring:spring再总结(ioc、aop、DI等)
    SpringBoot:整合layui、退出功能
    layui:内置模块(日期与时间、数据表格)
    nuxtjs中配置配置env
  • 原文地址:https://www.cnblogs.com/blongfree/p/5047963.html
Copyright © 2020-2023  润新知