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

菜单与对话框小结

标签:
Android

一、菜单

    (1)选择菜单(OptionsMenu)

    第一种方法:

            1、在res目录下建立一个名称是menu的文件夹;

            2、在menu下面建立一个XML文件(默认就是menu的类型)

            3、在建立的XML文件中添加菜单的选项

                    XML中有很多的属性:

                        <1>android:orderInCategory        表示的意思是:确定当前的item在整个item中所在的位置(数字越小越靠前)

                        <2>android:title        确定选项的内容

                        <3>android:id            设置选项ID

                        <4>android:icon        设置选项的图标

                        <5>android:showAsAction        设置图标的显示方式

1.  <?xml version="1.0" encoding="utf-8"?>

2.  <menu xmlns:android="http://schemas.android.com/apk/res/android" >

3.   

4.      <item

5.          android:id="@+id/select_01"

6.          android:orderInCategory="1"

7.          android:title="马超"/>

8.      <item

9.          android:id="@+id/select_02"

10.         android:orderInCategory="2"

11.         android:title="马云禄"/>

12.     <item

13.         android:id="@+id/select_03"

14.         android:orderInCategory="3"

15.         android:title="马谡"/>

16.  

17. </menu>

            4、在Activity中重写onCreateOptionsMenu方法

1.  @Override

2.      public boolean onCreateOptionsMenu(Menu menu) {

3.   

4.  }

            5、通过getMenuInflater()的布局加载器来加载文件

                    getMenuInflater().inflate(R.menu.main,menu);

                        第二个参数表示的意思是将前面的menu布局加载到后面的menu对象中。

        第二种方法

            1、 在Activity默认重写的onCreateOptionsMenu方法中通过menu对象的add方法来添加item的值

                    menu.add(" ");        添加选项的内容

1.  menu.add("黄盖");

2.  menu.add("黄忠");

3.  menu.add("黄月英");

                    menu.add(groupId,ItemId,orderInCategory,title);

                            第一个参数:表示组的ID

                            第二个参数:表示自己的ID

                            第三个参数:Item的排列顺序

                            第四个参数:当前Item的内容

1.         menu.add(1, 1, 1, "曹洪");

2.         menu.add(1, 2, 2, "曹丕");

3.         menu.add(2, 1, 3, "夏侯渊");

4.         menu.add(2, 2, 4, "夏侯惇");

            2、在Item中添加子菜单

                    menu.addSubMenu(" ");        添加菜单内容

1.         menu.addSubMenu("孙坚");

2.         menu.addSubMenu("孙权");

3.         menu.addSubMenu("孙策");

                    menu.addSubMenu(groupId,ItemId,orderInCategory,title);

                            第一个参数:表示组的ID

                            第二个参数:表示自己的ID

                            第三个参数:Item的排列顺序

                            第四个参数:当前Item的内容

                    注意:添加子菜单的需要在addSubMenu方法的返回值中进行添加

1.         SubMenu subMenu = menu.addSubMenu("魏国");

2.         subMenu.add("曹操");

3.         subMenu.add("典韦");

4.         subMenu.add("许褚");

5.         SubMenu subMenu2 = menu.addSubMenu("蜀国");

6.         subMenu2.add("周仓");

7.         subMenu2.add("关平");

8.         subMenu2.add("马良");

9.         SubMenu subMenu3 = menu.addSubMenu("吴国");

10.        subMenu3.add("大乔");

11.        subMenu3.add("小乔");

12.        subMenu3.add("孙尚香");

        菜单事件的监听

                第一种方法:

                        直接重写onOptionsItemSelected(MenuItem item)方法,在这个参数里可以通过item.getItemId()来获取当前点击Item的id。

1.         @Override

2.         public boolean onOptionsItemSelected(MenuItem item) {

3.                switch (item.getItemId()) {

4.                case R.id.select_01:

5.                      Toast.makeText(MainActivity.this, "你选择了马超", Toast.LENGTH_SHORT)

6.                                    .show();

7.                      break;

8.                case R.id.select_02:

9.                      Toast.makeText(MainActivity.this, "你选择了马云禄", Toast.LENGTH_SHORT)

10.                                   .show();

11.                     break;

12.               case R.id.select_03:

13.                     Toast.makeText(MainActivity.this, "你选择了马谡", Toast.LENGTH_SHORT)

14.                                   .show();

15.                     break;

16.  

17.               default:

18.                     break;

19.               }

20.               return super.onOptionsItemSelected(item);

21.        }

                第二种方法:

                        menu.add()        返回一个menuitem的对象

                        menuItem.setOnMenuItemClickListenter(MenuItem item)        可以进行选项菜单的判定

1.                  MenuItem menuItem = menu.add(1, 1, 1, "黄盖");

2.                MenuItem menuItem2 = menu.add(1, 2, 2, "黄忠");

3.                MenuItem menuItem3 = menu.add(1, 3, 3, "黄月英");

4.                menuItem.setOnMenuItemClickListener(new MyOnMenuItemClickListener());

5.                menuItem2.setOnMenuItemClickListener(new MyOnMenuItemClickListener());

6.                menuItem3.setOnMenuItemClickListener(new MyOnMenuItemClickListener());

1.         private class MyOnMenuItemClickListener implements OnMenuItemClickListener {

2.   

3.                @Override

4.                public boolean onMenuItemClick(MenuItem item) {

5.                      switch (item.getItemId()) {

6.                      case 1:

7.                             Toast.makeText(MainActivity.this, "你选择了黄盖", Toast.LENGTH_SHORT)

8.                                           .show();

9.                             break;

10.                     case 2:

11.                            Toast.makeText(MainActivity.this, "你选择了黄忠", Toast.LENGTH_SHORT)

12.                                          .show();

13.                            break;

14.                     case 3:

15.                            Toast.makeText(MainActivity.this, "你选择了黄月英", Toast.LENGTH_SHORT)

16.                                          .show();

17.                            break;

18.  

19.                     default:

20.                            break;

21.                     }

22.                     return false;

23.               }

24.  

25.        }

                选项菜单的注意事项:

                        选项菜单以来的对象是Activity,不能依赖于View。

        (2)上下文菜单(ContextMenu)    

                    注意:上下文菜单依赖的对象是View,也就是说可以触发某个控件来显示一个菜单选项。

        第一种方法:

                1、和选项菜单一样,在menu文件夹下建立一个Android XML file来进行配置;

1.  <menu xmlns:android="http://schemas.android.com/apk/res/android"

2.      xmlns:tools="http://schemas.android.com/tools"

3.      tools:context="com.hxl.android_day01_test.ContextMenuActivity" >

4.   

5.      <item

6.          android:id="@+id/wei"

7.          android:orderInCategory="1"

8.          android:showAsAction="never"

9.          android:title="魏国"/>

10.     <item

11.         android:id="@+id/shu"

12.         android:orderInCategory="2"

13.         android:showAsAction="never"

14.         android:title="蜀国"/>

15.     <item

16.         android:id="@+id/wu"

17.         android:orderInCategory="3"

18.         android:showAsAction="never"

19.         android:title="吴国"/>

20.  

21. </menu>

                2、重写Activity中的onCreateContextMenu()方法

1.         @Override

2.         public void onCreateContextMenu(ContextMenu menu, View v,

3.                      ContextMenuInfo menuInfo) {

4.                getMenuInflater().inflate(R.menu.context_menu, menu);

5.                super.onCreateContextMenu(menu, v, menuInfo);

6.         }

                3、注册在控件上弹出一个上下文菜单registerForContextMenu(View  view);(后面的参数表示绑定的View)

1.                Button button=(Button) findViewById(R.id.btn);

2.                registerForContextMenu(button);

        上下文菜单的事件处理:

        第一种方法

                在Activity中重写onContextItemSelected(MenuItem item)方法,可以通过item.getItemId()来获取点击的Item的id。

1.         @Override

2.         public boolean onContextItemSelected(MenuItem item) {

3.                switch (item.getItemId()) {

4.                case R.id.wei:

5.                      Toast.makeText(ContextMenuActivity.this, "你选择了魏国", Toast.LENGTH_SHORT).show();

6.                      break;

7.                case R.id.shu:

8.                      Toast.makeText(ContextMenuActivity.this, "你选择了蜀国", Toast.LENGTH_SHORT).show();

9.                      break;

10.               case R.id.wu:

11.                     Toast.makeText(ContextMenuActivity.this, "你选择了吴国", Toast.LENGTH_SHORT).show();

12.                     break;

13.  

14.               default:

15.                     break;

16.               }

17.               return super.onContextItemSelected(item);

18.        }

        第二种方法

                menu.add()        返回的是一个menuItem对象

                menuItem.setOnMenuItemClickListener(MenuItem  item)        进行选项菜单的判定

1.          MenuItem menuItem = menu.add(1, 1, 1, "周瑜");

2.                MenuItem menuItem2 = menu.add(1, 2, 3, "甘宁");

3.                MenuItem menuItem3 = menu.add(1, 3, 3, "凌统");

4.                menuItem.setOnMenuItemClickListener(new MyOnMenuItemClickListener());

5.                menuItem2.setOnMenuItemClickListener(new MyOnMenuItemClickListener());

6.                menuItem3.setOnMenuItemClickListener(new MyOnMenuItemClickListener());

1.         private class MyOnMenuItemClickListener implements OnMenuItemClickListener{

2.   

3.                @Override

4.                public boolean onMenuItemClick(MenuItem item) {

5.                      switch (item.getItemId()) {

6.                      case 1:

7.                             Toast.makeText(ContextMenuActivity.this, "你选择了周瑜", Toast.LENGTH_SHORT).show();

8.                             break;

9.                      case 2:

10.                            Toast.makeText(ContextMenuActivity.this, "你选择了甘宁", Toast.LENGTH_SHORT).show();

11.                            break;

12.                     case 3:

13.                            Toast.makeText(ContextMenuActivity.this, "你选择了凌统", Toast.LENGTH_SHORT).show();

14.                            break;

15.  

16.                     default:

17.                            break;

18.                     }

19.                     return false;

20.               }

        (3)PopupMenu的使用

                1、PopupMenu popupMenu=new PopupMenu(PopupMenuActivity.this, v);初始化PopupMenu对象,第二个参数的意思是:将PopupMenu绑定给此控件

                2、popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());绑定布局对象

                3、popupMenu.setOnMenuItemClickListener(new MyOnMenuItemClickListener());设置点击事件

                4、popupMenu.show();显示菜单

                5、popupMenu.setOnDismissListener(new MyOnDismissListener());设置消失时触发的事件

                6、popupMenu.dismiss();菜单消失

        ContextMenu和PopupMenu的区别是什么?

                ContextMenu中只能绑定一个View来进行显示;PopupMenu能够同时绑定多个View来进行显示。

        (4)PopupWindow的使用(在某一控件下可以弹出一个选项框的内容)重点

                //第一步:初始化PopupWindow对象

                PopupWindow  popupWindow=new PopupWindow(PopupWindowActivity.this);

                //第二步:通过PopupWindow对象来对PopupWindow对象添加相应的设置

                popupWindow.setHeight(LayoutParams.WRAP_CONTENT);

                popupWindow.setWidth(LayoutParams.WRAP_CONTENT);

                //下面这句代码常常用来解决一个问题:点击弹出框以外的区域如果弹出框不消失的话,添加这个属性理论上就消失了(一般情况也不设置)

                popupWindow.setBackgroundDrawable(new ColorDrawable(0x00000000));

                //设置弹出框可以获取焦点

                popupWindow.setFocusable(true);

                //表示的是在弹出框以外的区域点击了之后,弹出框消失(true)

                popupWindow.setOutsideTouchable(true);

                //表示的是是否可以触摸(一般不设置)

                popupWindow.setTouchable(true);

                //第三步:通过布局加载器对象将XML文件转换成View对象

                LayoutInflater inflater=getLayoutInflater();

                View view =inflater.inflate(R.layout.popupwindow_list, null);

                //第四步:将View添加到PopupWindow中

                popupWindow.setContentView(view);

                //第五步:确定PopupWindow显示的位置

                popupWindow.showAsDropDown(v);

                //让PopupWindow消失的方法

                popupWindow.dismiss();

        (5)对话框的写法

                1、初始化对话框的Builder

                        AlertDialog.Builder builder=new Builder(DialogActivity.this);

                2、通过Builder来设置相应的信息

                        builder.setTitle("你要选择哪个国家?");       

                        builder.setIcon(R.drawable.ic_launcher);

                        builder.setMessage("确定你要选择的国家");

                3、.show();

                        六种对话框:

第一种:

1.         /**

2.          * 用于提示信息,只是满足数据显示

3.          */

4.   

5.         public void firstDialog(){

6.                //第一步:通过AlertDailog中的Builder完成Builder的初始化,对话框的使用其实是用Builder创建的

7.                //这里的上下文对象只能是当前Dailog所归属的页面的上下文,不能使getApplicationContext()

8.                AlertDialog.Builder builder=new Builder(DialogActivity.this);

9.                //第二步:可以通过Builder来设置显示的信息

10.               builder.setTitle("你要选择哪个国家?");

11.               builder.setIcon(R.drawable.ic_launcher);

12.               builder.setMessage("确定你要选择的国家");

13.               builder.setNegativeButton("魏", new DialogInterface.OnClickListener() {

14.                    

15.                     @Override

16.                     public void onClick(DialogInterface dialog, int which) {

17.                            Log.i("****", "你选择了魏国");

18.                     }

19.               });

20.               builder.setNeutralButton("蜀", new DialogInterface.OnClickListener() {

21.                    

22.                     @Override

23.                     public void onClick(DialogInterface dialog, int which) {

24.                            Log.i("****", "你选择了蜀国");

25.                     }

26.               });

27.               builder.setPositiveButton("吴", new DialogInterface.OnClickListener() {

28.                    

29.                     @Override

30.                     public void onClick(DialogInterface dialog, int which) {

31.                            Log.i("****", "你选择了吴国");

32.                     }

33.               });

34.               builder.show();

35.        }

第二种:

1.         /**

2.          * 带有那个输入框的对话框

3.          */

4.         public void secondDialog() {

5.                AlertDialog.Builder builder=new Builder(DialogActivity.this);

6.                builder.setTitle("请输入");

7.                final EditText editText=new EditText(DialogActivity.this);

8.                builder.setView(editText);

9.                builder.setNegativeButton("取消",null);

10.               builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {

11.                     @Override

12.                     public void onClick(DialogInterface dialog, int which) {

13.                            Log.e("-------------","你提交了信息    "+editText.getText().toString());

14.                     }

15.               });

16.               builder.show();

17.        }

第三种:

1.         /**

2.          * 带有多选框的对话框

3.          */

4.         public void thirdDialog() {

5.                AlertDialog.Builder builder=new Builder(DialogActivity.this);

6.                builder.setTitle("你喜欢的城市");

7.                builder.setMultiChoiceItems(new String[]{"成都","广州","上海","北京"},new boolean[]{false,false,false,true},new OnMultiChoiceClickListener() {     

8.                      /**

9.                       * which:Item的位置

10.                      * isChecked:选中的状态是什么? 取消/选中

11.                      */

12.                     @Override

13.                     public void onClick(DialogInterface dialog, int which, boolean isChecked) {

14.                Log.e("-------你选择的位置是:"+which+"当前的状态是:",isChecked+"");                  

15.                     }

16.               });

17.               builder.setNegativeButton("取消",null);

18.               builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {

19.                     @Override

20.                     public void onClick(DialogInterface dialog, int which) {

21.                            Log.e("------------------","数据已经提交....");

22.                     }

23.               });

24.               builder.show();

25.        }

第四种:

1.         /**

2.          * 具有单选框的对话框

3.          */

4.         public void fouthDialog() {

5.                AlertDialog.Builder builder=new Builder(DialogActivity.this);

6.                builder.setTitle("性别选择");

7.                builder.setSingleChoiceItems(new String[]{"男","女","other"}, 0,new DialogInterface.OnClickListener() {     

8.                      @Override

9.                      public void onClick(DialogInterface dialog, int which) {

10.                            Log.e("-------当前选中的位置是:-------",which+"");

11.                     }

12.               });

13.               builder.setNegativeButton("取消",null);

14.               builder.setPositiveButton("提交",new DialogInterface.OnClickListener() {     

15.                     @Override

16.                     public void onClick(DialogInterface dialog, int which) {

17.                            Log.e("-----------","数据已经提交慢慢刷....");

18.                     }

19.               });

20.               builder.show();

21.        }

第五种:

1.         /**

2.          * 含有list形式的对话框

3.          */

4.         public void fifthDialog(){

5.                AlertDialog.Builder builder=new Builder(DialogActivity.this);

6.                builder.setTitle("多Item形式的对话框");

7.                builder.setItems(new String []{"魏","蜀","吴"},new DialogInterface.OnClickListener() {

8.                     

9.                      @Override

10.                     public void onClick(DialogInterface dialog, int which) {

11.                            Log.i("------", "当前的选择位置是:"+which);

12.                            dialog.dismiss();

13.                     }

14.               });

15.               builder.show();

16.        }

第六种:

1.  public class MyDialog extends Dialog{

2.         String title;

3.         String content;

4.         TextView mTextViewTitle;

5.         TextView mTextViewContent;

6.         Button cancer;

7.         Button submit;

8.   

9.         public MyDialog(Context context,String title,String content) {

10.               super(context);

11.               this.title=title;

12.               this.content=content;

13.               init(context);

14.        }

15.        /**

16.         * 初始化Dialog

17.         */

18.        private void init(Context context) {

19.               //第一步:获取布局加载器

20.               LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

21.               //第二步:将layout转换成View

22.               View view =inflater.inflate(R.layout.dialog_layout, null);

23.               setContentView(view);

24.               //设置自定义Dialog的窗口的宽高

25.               getWindow().setLayout(600, 600);

26.               //第三步:找到控件

27.               mTextViewTitle=(TextView) view.findViewById(R.id.textViewTitle);

28.               mTextViewContent=(TextView) view.findViewById(R.id.textView);

29.               cancer=(Button) view.findViewById(R.id.btncancer);

30.               submit=(Button) view.findViewById(R.id.btnSure);

31.               mTextViewContent.setText(content);

32.               mTextViewTitle.setText(title);

33.               submit.setOnClickListener(new Listener());

34.               cancer.setOnClickListener(new Listener());

35.        }

36.        /**

37.         * 定义一个回调函数来完成那个点击消息的回调

38.         */

39.        interface CallBack{

40.               public void click(int id);

41.        }

42.        CallBack callBack=null;

43.        public void setOnCallBackListener(CallBack callBack){

44.               this.callBack=callBack;

45.        }

46.        /**

47.         * 点击事件

48.         */

49.        private class Listener implements android.view.View.OnClickListener{

50.  

51.               @Override

52.               public void onClick(View v) {

53.                     callBack.click(v.getId());

54.               }

55.              

56.        }

57.  

58. }

1.                      case R.id.btn_06_dialog:

2.                             MyDialog dialog=new MyDialog(DialogActivity.this, "请做出选择", "你确定要这样吗?");

3.                             dialog.setOnCallBackListener(new CallBack() {

4.                                   

5.                                    @Override

6.                                    public void click(int id) {

7.                                           switch (id) {

8.                                           case R.id.btnSure:

9.                                                 Log.i("--------", "您选择了提交按钮");

10.                                                break;

11.                                          case R.id.btncancer:

12.                                                Log.i("--------", "您选择了取消按钮");

13.                                                break;

14.                                          default:

15.                                                break;

16.                                          }

17.                                   }

18.                            });

19.                            dialog.show();

20.                            break;

原文链接:http://www.apkbus.com/blog-815579-61579.html

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消