zoukankan      html  css  js  c++  java
  • 几种Menu和几种对话框

    一、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]);   
    //更新进度值
  • 相关阅读:
    codevs2606 约数和问题
    UOJ150 运输计划
    codevs1279 Guard 的无聊
    codevs1997 守卫者的挑战
    codevs1291 火车线路
    codevs1217 借教室
    codevs1281 Xn数列
    codevs1218 疫情控制
    codevs1199 开车旅行
    BZOJ1941 [Sdoi2010]Hide and Seek
  • 原文地址:https://www.cnblogs.com/android-blogs/p/5710143.html
Copyright © 2011-2022 走看看