为了账号安全,请及时绑定邮箱和手机立即绑定

几种Menu和几种对话框

标签:
Android

一、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、监听事件

5bba06230001597706890214.jpg

        

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

        

dialog.dismiss();    //让对话框消失

        

dialog.setProgress(values[0]);   

//更新进度值

5bba06230001597706890214.jpg

原文链接:http://www.apkbus.com/blog-832543-61234.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消