一、Menu
    1.OptionsMenu(弹出菜单)
        (1)显示弹出菜单布局必须要重写的方法    onCreateOptionsMenu    该方法必须返回true
                //加载菜单文件
                getMenuInflater().inflate(R.menu.main, menu);
                    //设置菜单添加图标有效
                    setIconEnable(menu, true);//enable为false时无效。
        (2)要做弹出菜单的点击事件必须要重写的方法    onOptionsItemSelected
                    //获取到被点击的菜单的id
                    int itemId = item.getItemId();
                    //获取到被点击的菜单的内容
                    int itemId = item.getTitle();
        (3)创建菜单项MenuItem
                *创建菜单xml文件,必须以<menu>为根标签
                    <item>标签属性
                        orderInCategory    排序方式(数字越大,排在越后面。如果值相等,那么就按照先后顺序排列)
                        showAsAction    菜单在actionbar上面的显示方式
                                             never:从不在actionbar上面显示
                                             alway:一直显示在actionbar上面
                                             ifRoom:如果actionbar上面有位置,那么就一直显示在actionbar上面
                *menu.add()方法增加菜单
 
    2.ContextMenu(上下文菜单)
        长按某个控件(可以同时绑定多个控件)显示的菜单
        //把上下文和一个控件进行绑定(可以绑定多个控件)
          registerForContextMenu(listView);
        (1)显示上下文菜单必须要重写的方法    onCreateContextMenu
                //加载一个菜单布局文件
                getMenuInflater().inflate(R.menu.main, menu);    //菜单资源加载器对象
                menu.setHeaderTitle("菜单标题");  //设置菜单标题
                menu.setHeaderIcon(android.R.drawable.ic_menu_compass);  //设置菜单标题图标
        (2)点击上下文菜单的事件必须要重写的方法    onContextItemSelected
             //获取到被点击的菜单项的详细信息(对于基本控件是没有的)
                ContextMenuInfo menuInfo = item.getMenuInfo();
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
                //获取到长按listView的item的位置信息
                int position = info.position;
                String string = (String) listView.getItemAtPosition(position);
                int itemId = item.getItemId();
 
        1、上下文菜单与OptionsMenu最大的不同在于:                                                                                    
                Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View;                             
                每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View   
                哪个View需要上下文菜单就通过registerForContextMenu(View view)给这个View注册上下文菜单。
          2、生成上下文菜单是通过Activity中的onCreateContextMenu()方法:                                                    
                onCreateContextMenu方法很像生成OptionsMenu的onCreateOptionsMenu方法;                      
                两者的不同在于:onCreateOptionsMenu只在用户第一次按“Menu”键时被调用,                         
                而onCreateContextMenu会在用户每一次长按注册了上下文菜单的View时被调用。                           
 
    3.PopupMenu(显示在控件周围)
        //textView:菜单显示的位置是在textView的周围
         menu = new PopupMenu(this, textView);
         //给菜单添加菜单布局
         getMenuInflater().inflate(R.menu.main, menu.getMenu());
         //菜单的点击事件
         menu.setOnMenuItemClickListener()
         show();    弹出菜单
         dismiss();    关闭菜单
 
    4.解决菜单项不显示图标的问题
        //enable为true时,菜单添加图标有效,enable为false时无效。
        private void setIconEnable(Menu menu, boolean enable)  {  
            try  {  
                Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");  
                Method m = clazz.getDeclaredMethod("setOptionalIconsVisible", boolean.class);  
                m.setAccessible(true);  
 
                //MenuBuilder实现Menu接口,创建菜单时,传进来的menu其实就是MenuBuilder对象(java的多态特征)  
                m.invoke(menu, enable);  
            } catch (Exception e)   {  
                e.printStackTrace();  
            }  
        }  
    
二、Dialog
    1.警告对话框(一般对话框)
        AlertDialog.Builder builder = new Builder(this);
        setTitle("");    设置标题
        setIcon();       设置标题图标
        setMessage("确定要删除吗");    设置对话框内容
        setPositiveButton("确定",listener);   点击确定按钮要做的事情
        // 通过buirder对象创建对话框对象
        AlertDialog  alertDialog = builder.create();
        alertDialog.setCanceledOnTouchOutside(false);
       // 显示对话框
        alertDialog.show();
        alertDialog.dismiss();
    2.自定义对话框
      AlertDialog.Builder builder = new Builder(this);
 //   View customView = LayoutInflater.from(this).inflate(R.layout.dialog_layout, null);
       View customView = getLayoutInflater().inflate(R.layout.dialog_layout, null);
        //设置对话框要显示的布局
        builder.setView(customView );
      Button btnSure = (Button) customView.findViewById(R.id.btnSure);
        btnSure.setOnClickListener(listener);
      ......
    3.日期选择对话框
        DatePickerDialog dialog = new DatePickerDialog
              ( this, 
             new OnDateSetListener() {重写onDateSet方法},  //选择日期之后调用的方法。
                year, month, day);    //日历显示的默认日期
           dialog.show();
    4.进度对话框
      
 注意:ProgressDialog控件一定要初始化,但不是像其它控件一样用findViewById,而是
              dialog = new ProgressDialog(this);
    1、属性
          setTitle    设置标题
            setMessage    提示框的内容
            setIcon    设置图标
            setProgressStyle(ProgressDialog.STYLE_HORIZONTAL)    设置对话框为水平进度对话框
            setCanceledOnTouchOutside(false)    设置点击对话框以外的地方,对话框不消失
    2、监听事件

dialog.show();    //显示对话框

dialog.dismiss();    //让对话框消失
        
dialog.setProgress(values[0]);   
//更新进度值

几种Menu和几种对话框的更多相关文章

  1. 20Mybatis_订单商品数据模型_一对一查询——resultType和resultMap两种方式以及两种方式的总结

    上一篇文章分析了数据模型,这篇文章就给出一个需求,这个需求是一对一查询,并完成这个需求. ------------------------------------------------------- ...

  2. curl文件上传有两种方式,一种是post_fileds,一种是infile

    curl文件上传有两种方式,一种是POSTFIELDS,一种是INFILE,POSTFIELDS传递@实际地址,INFILE传递文件流句柄! );curl_setopt($ch, CURLOPT_PO ...

  3. thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用。第二种架构模式两个单入口文件,分别生成两个应用定义define。。。函数可以定义配置文件。。。。

    thinkphp 的两种建构模式  第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用. ...

  4. LVS原理详解(3种工作方式8种调度算法)--老男孩

    一.LVS原理详解(4种工作方式8种调度算法) 集群简介 集群就是一组独立的计算机,协同工作,对外提供服务.对客户端来说像是一台服务器提供服务. LVS在企业架构中的位置: 以上的架构只是众多企业里面 ...

  5. 1.Git起步-Git的三种状态以及三种工作区域、CVCS与DVCS的区别、Git基本工作流程

    1.Git基础 版本控制系统是一种用于记录一个或多个文件内容变化,以便将来查阅恢复特定版本修订情况的系统. Git是一种分布式版本控制系统(Distributed Version Control Sy ...

  6. 解决Geoserver请求跨域的几种思路,第二种思路用过

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景描述 跨域问题是浏览器同源安全制引起的特别常见的问题.不同前端语 ...

  7. Java随机获取32位密码且必须包含大小写字母、数字和特殊字符,四种的任意三种

    Java随机获取32位密码且必须包含大小写字母.数字和特殊字符,四种的任意三种 Java随机获取32位密码且必须包含大小写字母.数字和特殊字符,四种的任意三种,代码如下: import java.ut ...

  8. 将一种cell当做几种cell使用

    将一种cell当做几种cell使用 将一种cell当做几种cell用是有着一些意义的,比如,有时候,不同的cell之间差异很小,如果再派生一个cell出来,就会显得很麻烦,这时候,将这个cell当做几 ...

  9. 在一个web 应用中,改变url无非是2种方式,一种是利用超链接进行跳转,另一种是使用浏览器的前进和回退功能

    在一个web 应用中,改变url无非是2种方式,一种是利用超链接进行跳转,另一种是使用浏览器的前进和回退功能 https://www.jianshu.com/p/27ee7df4ccc1

随机推荐

  1. poj 2762(强连通+判断链)

    题目链接:http://poj.org/problem?id=2762 思路:首先当然是要缩点建新图,由于题目要求是从u->v或从v->u连通,显然是要求单连通了,也就是要求一条长链了,最 ...

  2. c 从语言中的内存管理

    在C里,内存管理是通过专门的函数来实现.另外,为了兼容各种编程语言,操作系统提供的接口通常是 C 语言写成的函数声明(Windows 本身也由C和汇编语言写成). 1 分配内存 malloc 函数 需 ...

  3. linux 大量的TIME_WAIT解决办法

    发现存在大量TIME_WAIT状态的连接tcp        0      0 127.0.0.1:3306              127.0.0.1:41378             TIME ...

  4. json 得到时分秒为00:00:00,拿不到时分秒 解决办法

    数据库查询时间没有了时分秒的解决办法        问题出处,公司一个项目中使用动态sql方式查询Oracle数据库,在展示时Date类型字段只展示日期,无时分秒.        分析:        ...

  5. Write operations are not allowed in read-only mode

    使用Spring提供的Open Session In View而引起Write operations are not allowed in read-only mode (FlushMode.NEVE ...

  6. Highgui.imwrite("/data/pic1111.png", mat)失败,且找不到报错

    ——> Highgui.imwrite("/data/pic1111.png", mat)失败,且找不到报错. ok -->直接使用以下代码,自己保存mat,从而可以跟 ...

  7. 浅析CSS负边距

    本文主要讨论两点,1.左右负边距对元素宽度的影响:2.负边距对浮动元素的影响. 在讨论这两点前,首先要理解盒模型.文档流. 盒模型,见下图,简单明了. 文档流,将窗体自上而下分成一行行, 并在每行中按 ...

  8. 转载-使用 Feed4JUnit 进行数据与代码分离的 Java 单元测试

    JUnit 是被广泛应用的 Java 单元测试框架,但是它没有很好的提供参数化测试的支持,很多测试人员不得不把测试数据写在程序里或者通过其它方法实现数据与代码的分离,在后续的修改和维护上有诸多限制和不 ...

  9. js中的编码与解码

    一.encodeURI()定义和用法 encodeURI() 函数可把字符串作为 URI 进行编码. 语法 encodeURI(URIstring) 参数 描述 URIstring 必需.一个字符串, ...

  10. Android开发环境的安装 Eclipse

    Android开发环境的安装 1 IDE Android可以使用开发的IDE有Eclipse 或者 Android Studio.Android Studio还处于v 0.1.x版本,是early a ...