Menu菜单

本文详细介绍了Android开发中各种UI弹窗与菜单的使用方法,包括Toast、Dialog、OptionsMenu、ContextMenu、PopupMenu和PopupWindow等组件的具体实现与自定义技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Toast

  • Toast.makeText(参数1,参数2,参数3).show();
    • 参数1:上下文对象(Context)
    • 参数2:显示的内容
    • 参数3:显示的时间
  • 改变Toast改变的位置
    • Toast.setGravity(参数1,参数2,参数3)
      • 参数1:显示的位置,Gravity内部有常量
      • 参数2、3:显示位置上的偏移量 +-值都可以写
  • 自定义Toast
    • 创建Toast
      • Toast toast = new Toast();
    • 创建显示的View
      • Java代码中创建菜单
      • 使用Layout通过layoutInflater转换成View
    • 把显示的View设置给Toast
      • toast.setView();
    • Toast.show();

OptionMenu

  • 手机中菜单按钮点击以后,程序弹出的菜单!还有一种情况!如果手机中没有菜单按钮!那么此菜单会在屏幕右上角显示三个点!点击以后会弹出菜单!
  • 菜单显示的布局(菜单显示的样子)
    • res-menu文件夹中
      • <item
        android:id="@+id/action_add" //id
        android:icon="@drawable/ic_launcher"
        android:title="添加"/> //显示的文本内容
  • 创建菜单
    • 重写onCreateOptionMenu()方法
      • getMenuInflater(参数1,参数2);
        • 参数1:R.menu.xxx,menu布局文件
        • 参数2:menu
        • 返回值:true表示显示菜单,false代表不显示菜单
    • 动态添加
      • 菜单的id
      • 菜单的显示内容
        • menu.add(Menu.NONE, 205, Menu.NONE, "Java代码中添加的菜单");
  • OptionsMenu的监听
    • 在Activity中重写onOptionsItemSelected()
      • MenuItem.getItemId()得到单条菜单的id,根据id进行区分!
  • 二级OptionsMenu
    • 功能不具体化的时候使用
      • <item><menu></menu></item>
  • 设置菜单图标
    • // 通过反射似的4.0以上的菜单可以设置菜单图标
      private void setIconEnable(Menu menu, boolean enabled) {
      try {
      // 根据类名得到一个类对象
      Class<?> clazz = Class.forName("com.android.internal.view.menu.MenuBuilder");
      // 得到这个类对象中的方法
      Method method = clazz.getDeclaredMethod("setOptionalIconsVisible",boolean.class);
      // 设置方法的访问性
      method.setAccessible(true);
      // 执行这个方法
      method.invoke(menu, enabled);
      } catch (Exception e) {
      e.printStackTrace();
      }
      }

ContextMenu上下文菜单

  • 手机中可以创建上下文菜单!创建以后长按会弹出上下文菜单!类似Windows中鼠标右键弹出的菜单!
  • 作用范围:作用到具体的控件上!
  • 步骤:
    • 创建菜单布局
    • 注册上下文菜单
      • registerForContextMenu(textView);
    • 创建菜单
      • onCreateContextMenu
    • 菜单监听
      • onContextItemSelected
      • 触发:每次长按注册的控件都会触发!

PopupMenu

  • 弹出菜单,Android3.1(API12)出的
  • 对比上下文菜单
    • 共同点:
      • 都需要绑定一个控!
    • 不同点:
      • 上下文菜单是长按触发
      • PopupMenu是手动触发!调用show()触发!
  • 步骤:
    • 创建菜单布局
    • 创建PopupMenu
      • /**
        *参数2: 在哪个控件下面显示
        */
        //创建一个PopupMenu
        PopupMenu popupMenu = new PopupMenu(this, view);
        //设置菜单布局
        getMenuInflater().inflate(R.menu.main, popupMenu.getMenu());
    • 创建监听事件
      • setOnMenuItemClickListener(new OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item)
        });
    • 菜单显示
      • popupMenu.show();
  • PopupWindow在开发中经常被使用!它可以用于菜单!它可以弹出你任何想弹出的视图!!!而且可以控制弹出的位置!以后也可以添加动画!
  • 使用方法:
    • 创建想要弹出的布局
    • 创建PopupWindow
      • /*
        *参数1: PopupWindow显示的样子 View
        *参数2: 暂时先固定写这个
        */
        popupWindow = new PopupWindow(view, LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
    • 设置参数
      • //设置以后点击外部可以关闭
        popupWindow.setBackgroundDrawable(getResources().getDrawable(R.drawable.ic_launcher));
        //设置点击外部 自动关闭
        popupWindow.setFocusable(true);
        //点击外部是否关闭
        //ture 关闭
        //false 不关闭
        popupWindow.setOutsideTouchable(true);
    • PopupWindow显示
      • /**
        *参数1: 原始显示的视图
        *参数2: 具体的位置
        *xy : 偏移量
        */
        popupWindow.showAtLocation(parent, gravity, x, y);
        showAsDropDown() 在某控件下方显示

PopupWindow和PopupMenu的比较

  • 共同点:都需要主动触发!调用显示方法才会触发!
  • 不同点:
    • 位置:
      • PopupMenu显示在绑定控件的下方
      • PopupWindow显示位置可以自定义
    • 填充内容:
      • PopupMenu显示内容来自res下menu中菜单布局
      • PopupWindow会显示任何的View

Dialog

  • 他是Android中的提示框,级别会高于Toast,他需要调用show()方法开启,并且不会主动关闭!需要调用关闭方法dismiss(),提示内容会多于Toast!
  • 进度条Dialog
    • ProgressDialog,重量级的提示,不仅提示,还可以进行交互,处理逻辑!
  • 日期选择Dialog
    • DatePickerDialog
  • 时间选择Dialog
  • 普通的Dialog
    • AlertDialog.Builder dialog = new AlertDialog.Builder(this)
  • 自定义Dialog
    • 创建一个AlertDialog对象,然后使用setView()、setMessage()、setTitle()等方法来自定义
  • ListViewDialog
    • ListViewDialog中间自带一个ListView,只需要设置Adapter即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值