Menu和Dialog小结

一、菜单
    (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. <item
  4. android:id="@+id/select_01"
  5. android:orderInCategory="1"
  6. android:title="马超"/>
  7. <item
  8. android:id="@+id/select_02"
  9. android:orderInCategory="2"
  10. android:title="马云禄"/>
  11. <item
  12. android:id="@+id/select_03"
  13. android:orderInCategory="3"
  14. android:title="马谡"/>
  15. </menu>
              4、在Activity中重写onCreateOptionsMenu方法
   
   
  1. @Override
  2. public boolean onCreateOptionsMenu(Menu menu) {
  3. }
              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. default:
  17. break;
  18. }
  19. return super.onOptionsItemSelected(item);
  20. }
                   第二种方法:
                             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. @Override
  3. public boolean onMenuItemClick(MenuItem item) {
  4. switch (item.getItemId()) {
  5. case 1:
  6. Toast.makeText(MainActivity.this, "你选择了黄盖", Toast.LENGTH_SHORT)
  7. .show();
  8. break;
  9. case 2:
  10. Toast.makeText(MainActivity.this, "你选择了黄忠", Toast.LENGTH_SHORT)
  11. .show();
  12. break;
  13. case 3:
  14. Toast.makeText(MainActivity.this, "你选择了黄月英", Toast.LENGTH_SHORT)
  15. .show();
  16. break;
  17. default:
  18. break;
  19. }
  20. return false;
  21. }
  22. }
                   选项菜单的注意事项:
                             选项菜单以来的对象是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. <item
  5. android:id="@+id/wei"
  6. android:orderInCategory="1"
  7. android:showAsAction="never"
  8. android:title="魏国"/>
  9. <item
  10. android:id="@+id/shu"
  11. android:orderInCategory="2"
  12. android:showAsAction="never"
  13. android:title="蜀国"/>
  14. <item
  15. android:id="@+id/wu"
  16. android:orderInCategory="3"
  17. android:showAsAction="never"
  18. android:title="吴国"/>
  19. </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. default:
  14. break;
  15. }
  16. return super.onContextItemSelected(item);
  17. }
         第二种方法
                   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. @Override
  3. public boolean onMenuItemClick(MenuItem item) {
  4. switch (item.getItemId()) {
  5. case 1:
  6. Toast.makeText(ContextMenuActivity.this, "你选择了周瑜", Toast.LENGTH_SHORT).show();
  7. break;
  8. case 2:
  9. Toast.makeText(ContextMenuActivity.this, "你选择了甘宁", Toast.LENGTH_SHORT).show();
  10. break;
  11. case 3:
  12. Toast.makeText(ContextMenuActivity.this, "你选择了凌统", Toast.LENGTH_SHORT).show();
  13. break;
  14. default:
  15. break;
  16. }
  17. return false;
  18. }
         (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. public void firstDialog(){
  5. //第一步:通过AlertDailog中的Builder完成Builder的初始化,对话框的使用其实是用Builder创建的
  6. //这里的上下文对象只能是当前Dailog所归属的页面的上下文,不能使getApplicationContext()
  7. AlertDialog.Builder builder=new Builder(DialogActivity.this);
  8. //第二步:可以通过Builder来设置显示的信息
  9. builder.setTitle("你要选择哪个国家?");
  10. builder.setIcon(R.drawable.ic_launcher);
  11. builder.setMessage("确定你要选择的国家");
  12. builder.setNegativeButton("魏", new DialogInterface.OnClickListener() {
  13. @Override
  14. public void onClick(DialogInterface dialog, int which) {
  15. Log.i("****", "你选择了魏国");
  16. }
  17. });
  18. builder.setNeutralButton("蜀", new DialogInterface.OnClickListener() {
  19. @Override
  20. public void onClick(DialogInterface dialog, int which) {
  21. Log.i("****", "你选择了蜀国");
  22. }
  23. });
  24. builder.setPositiveButton("吴", new DialogInterface.OnClickListener() {
  25. @Override
  26. public void onClick(DialogInterface dialog, int which) {
  27. Log.i("****", "你选择了吴国");
  28. }
  29. });
  30. builder.show();
  31. }
第二种:
   
   
  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. @Override
  9. public void onClick(DialogInterface dialog, int which) {
  10. Log.i("------", "当前的选择位置是:"+which);
  11. dialog.dismiss();
  12. }
  13. });
  14. builder.show();
  15. }
第六种:
   
   
  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. public MyDialog(Context context,String title,String content) {
  9. super(context);
  10. this.title=title;
  11. this.content=content;
  12. init(context);
  13. }
  14. /**
  15. * 初始化Dialog
  16. */
  17. private void init(Context context) {
  18. //第一步:获取布局加载器
  19. LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  20. //第二步:将layout转换成View
  21. View view =inflater.inflate(R.layout.dialog_layout, null);
  22. setContentView(view);
  23. //设置自定义Dialog的窗口的宽高
  24. getWindow().setLayout(600, 600);
  25. //第三步:找到控件
  26. mTextViewTitle=(TextView) view.findViewById(R.id.textViewTitle);
  27. mTextViewContent=(TextView) view.findViewById(R.id.textView);
  28. cancer=(Button) view.findViewById(R.id.btncancer);
  29. submit=(Button) view.findViewById(R.id.btnSure);
  30. mTextViewContent.setText(content);
  31. mTextViewTitle.setText(title);
  32. submit.setOnClickListener(new Listener());
  33. cancer.setOnClickListener(new Listener());
  34. }
  35. /**
  36. * 定义一个回调函数来完成那个点击消息的回调
  37. */
  38. interface CallBack{
  39. public void click(int id);
  40. }
  41. CallBack callBack=null;
  42. public void setOnCallBackListener(CallBack callBack){
  43. this.callBack=callBack;
  44. }
  45. /**
  46. * 点击事件
  47. */
  48. private class Listener implements android.view.View.OnClickListener{
  49. @Override
  50. public void onClick(View v) {
  51. callBack.click(v.getId());
  52. }
  53. }
  54. }
   
   
  1. case R.id.btn_06_dialog:
  2. MyDialog dialog=new MyDialog(DialogActivity.this, "请做出选择", "你确定要这样吗?");
  3. dialog.setOnCallBackListener(new CallBack() {
  4. @Override
  5. public void click(int id) {
  6. switch (id) {
  7. case R.id.btnSure:
  8. Log.i("--------", "您选择了提交按钮");
  9. break;
  10. case R.id.btncancer:
  11. Log.i("--------", "您选择了取消按钮");
  12. break;
  13. default:
  14. break;
  15. }
  16. }
  17. });
  18. dialog.show();
  19. break;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员丶星霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值