android popuwindow点击外部窗口不消失的实例

发布时间 - 2026-01-11 00:40:16    点击率:

网上大多数都是说如何监听点击外部消失,但我遇到的问题是点击外面不让其消失,如下是我的解决方案,关键是:popupMenu.setBackgroundDrawable(null);popupMenu.setFocusable(false);

popupMenu = new PopupWindow(view, keylinearlayout.getWidth(), LayoutParams.WRAP_CONTENT);

 ColorDrawable cd = new ColorDrawable(R.color.white);
 //popupMenu.setBackgroundDrawable(cd);
 popupMenu.setBackgroundDrawable(null);
 popupMenu.setAnimationStyle(R.style.AnimBottom);
 popupMenu.update();
 popupMenu.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
 popupMenu.setTouchable(true); // 设置popupwindow可点击
 popupMenu.setOutsideTouchable(false); // 设置popupwindow外部可点击
 popupMenu.setFocusable(false); // 获取焦点

 popupMenu.setTouchInterceptor(new View.OnTouchListener() {

  @Override
  public boolean onTouch(View v, MotionEvent event) {
  // 如果点击了popupwindow的外部,popupwindow也会消失
  // 这里如果返回true的话,touch事件将被拦截
  // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss
  if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
   //popupMenu.dismiss();
   StationEventCaptain.getInstance().fireEventDataChange(
    new StationEventData(IStationEventName.HEDGE_KEYBORAD_DIMISS, true));
   return true;
  }
  return false;
  }
 });

 //初始化键盘上的数字
 initALLDig(view);
 }

 @Override
 public PopupWindow createPupupWindow() {
 return popupMenu;
 }

 @Override
 public void showPopupMenu() {
 if (popupMenu != null && popupMenu.isShowing()) {
  popupMenu.dismiss();
  StationEventCaptain.getInstance().fireEventDataChange(
   new StationEventData(IStationEventName.HEDGE_KEYBORAD_DIMISS, true));
 } else {
  //popupMenu.showAsDropDown(sourceEditView);

  int pianyi = dpToPx(activity, 8);
  if (keyboardType == IPopupMenu.MENU_TYPE_HEDGE_Left) {
  popupMenu.showAtLocation(keylinearlayout, Gravity.BOTTOM | Gravity.LEFT, pianyi, 0); //设置layout在PopupWindow中显示的位置 
  } else if (keyboardType == IPopupMenu.MENU_TYPE_HEDGE_RIGHT) {
  popupMenu.showAtLocation(keylinearlayout, Gravity.BOTTOM | Gravity.RIGHT, pianyi, 0); //设置layout在PopupWindow中显示的位置 
  } else {
  popupMenu.showAtLocation(keylinearlayout, Gravity.BOTTOM | Gravity.LEFT, 0, 0); //设置layout在PopupWindow中显示的位置 
  }

  // popupMenu.showAsDropDown(sourceView,
  // Math.round(sourceView.getX()),
  // (int) (sourceView.getY()));
 }
 }

 /**
 * 将dp转成像素的
 * 
 * @param context
 * @param dp
 * @return
 */
 static int dpToPx(final Context context, final float dp) {
 return (int) (dp * context.getResources().getDisplayMetrics().density);
 }

 @Override
 public void destroyPopupMenu() {
 popupMenu.dismiss();
 StationEventCaptain.getInstance()
  .fireEventDataChange(new StationEventData(IStationEventName.HEDGE_KEYBORAD_DIMISS, true));

 }

成功解决,有问题可以讨论。

以上这篇android popuwindow点击外部窗口不消失的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# dialog点击外部不消失  # Android7.0 工具类:DiffUtil详解  # 适配android7.0获取文件的Uri的方法  # Android7.0 MessageQueue详解  # Android圆形头像拍照后“无法加载此图片”的问题解决方法(适配Android7.0)  # Android中PopuWindow实现下拉列表实例  # Android adb.exe程序启动不起来 具体解决方法  # Android Studio的中文乱码问题解决方法  # Android Activity切换(跳转)时出现黑屏的解决方法 分享  # 基于Android中实现定时器的3种解决方法  # Android SDK三种更新失败及其解决方法  # Android7.0上某些PopuWindow出现显示位置不正确问题的解决方法  # 给大家  # 也会  # 但我  # 希望能  # 问题是  # 将被  # 是说  # 这篇  # 不被  # 小编  # 让其  # 转成  # 大家多多  # 网上  # setInputMethodMode  # update  # INPUT_METHOD_NEEDED  # true  # setTouchable  # AnimBottom 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 制作旅游网站html,怎样注册旅游网站?  米侠浏览器网页背景异常怎么办 米侠显示修复  Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲  深圳网站制作培训,深圳哪些招聘网站比较好?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  C#如何调用原生C++ COM对象详解  如何快速生成高效建站系统源代码?  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  手机网站制作与建设方案,手机网站如何建设?  Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤  javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  高性价比服务器租赁——企业级配置与24小时运维服务  简历没回改:利用AI润色让你的文字更专业  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何快速搭建安全的FTP站点?  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  如何安全更换建站之星模板并保留数据?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel怎么实现验证码(Captcha)功能  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  活动邀请函制作网站有哪些,活动邀请函文案?  EditPlus 正则表达式 实战(3)  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  如何快速上传自定义模板至建站之星?  INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】  千库网官网入口推荐 千库网设计创意平台入口  node.js报错:Cannot find module 'ejs'的解决办法  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  Laravel怎么在Blade中安全地输出原始HTML内容  iOS验证手机号的正则表达式  香港服务器租用费用高吗?如何避免常见误区?  制作电商网页,电商供应链怎么做?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  如何在阿里云高效完成企业建站全流程?  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面  使用PHP下载CSS文件中的所有图片【几行代码即可实现】  如何彻底卸载建站之星软件?