PopupWindow细节

Android的PopupWindow(详细版) 在学习PopupWindow之前,我们先了解一下PopupWindow的继承关系。↳是一个可以在Activity之上显示任意View的控件。在Android经常使用,效果跟Dialog效果类似,不同点在于可以控制显示的位置,比如底部显示等。 阅读详情

PopupWindow细节

简介

A popup window that can be used to display an arbitrary view. The popup windows is a floating container that appears on top of the current activity.

  1. 显示

    View contentView = View.inflate(getApplicationContext(),R.layout.popup_appmanger, null); 
    //这里最后一个参数是指定是否能够获取焦点,如果为false那么点击弹出来之后就不消失了,但是设置为true之后点击一个条目它弹出来了,
    再点击别的条目的时候这个popupWindow窗口没有焦点了就自己消失了
    PopupWindow popwindow = new PopupWindow(contentView ,LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,true);
    popwindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    int[] location = new int[2];
    //得到当前组件的位置
    view.getLocationInWindow(location);
    //显示popupWindow
    popwindow.showAtLocation(parent,Gravity.LEFT | Gravity.TOP, DensityUtil.dip2px(getApplicationContext(), location[0] + 70),location[1]);
  2. 取消

    if (popwindow != null && popwindow.isShowing()) {
       popwindow.dismiss();
       popwindow = null;
    } 
  3. 细节
    PopupWindow是存在到Activity上的,如果PopupWindow在显示的时候按退出键的时候该Activity已经销毁,但是PopupWindow没有销毁,
    所以就报错了(Logcat有报错信息但是程序不会崩溃),所以我们在Activity的onDestroy方法中要判断一下PopupWindow是否在显示,如果在显示就取消显示。
    PopupWindow默认是没有背景的,如果想让它播放动画就没有效果了,因为没有背景就什么也播放不了,所以我们在用这个PopupWindow的时候必须要给它设置一个背景,
    通常可以给它设置为透明色,这样再播放动画就有效果了
    popwindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));

让PopupWindow响应Back键后关闭。

  • 最简单
    在new的时候,使用下面的方法:

    new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true);

    当然你也可以手动设置它:

    mPopupWindow.setFocusable(true);
    mPopupWindow.setFocusableInTouchMode(true);  

    此时实际上还是不能起作用的,必须加入下面这行作用未知的语句才能发挥作用:

    mPopupWindow.setBackgroundDrawable(new BitmapDrawable());

    设置 BackgroundDrawable并不会改变你在配置文件中设置的背景颜色或图像。

  • 最通用
    首先在布局文件(*.xml)中随意选取一个不影响任何操作的View,推荐使用最外层的Layout。
    然后设置该Layout的Focusable和FocusableInTouchMode都为true。
    接着回到代码中对该View重写OnKeyListener()事件了。捕获KEYCODE_BACK给对话框dismiss()。

    给出一段示例:

    private PopupWindow mPopupWindow;
    private View view;
    private LinearLayout layMenu;
    
    LayoutInflater inflater = (LayoutInflater) main.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    view = inflater.inflate(R.layout.popup_main_menu, null, false);
    layMenu = (LinearLayout) view.findViewById(R.id.layMenu);
    mPopupWindow = new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, true);
    
    layMenu.setOnKeyListener(new OnKeyListener() {
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK) {
                mPopupWindow.dismiss();
            }
    
            return false;
        }
    });

  • 邮箱 :charon.chui@gmail.com
  • Good Luck!
apollo-慢速车向左绕行 当主车前方出现其他车辆时,通过左侧车道对前车绕行。 阅读详情

相关推荐

光学薄膜设计入门:Essential Macleod中文版从安装到实战全攻略

本文为光学薄膜设计初学者提供Essential Macleod软件从安装部署到实战应用的全流程中文指南。详细解析了软件核心界面、材料管理及工作流程,并通过一个完整的宽带增透膜设计实例,手把手演示膜系构建、优化与分析方法,帮助用户快速掌握这一业界标杆工具,跨越理论与实操的门槛。

weixin_29309475的博客 988

deck.gl与Mapbox/MapLibre Popup层级问题的技术解析

在将deck.gl与Mapbox或MapLibre结合使用时,开发者可能会遇到一个常见的UI层级问题:当使用`MapboxOverlay`组件时,Mapbox/MapLibre的Popup弹窗会显示在deck.gl渲染的图形元素下方,这显然不符合大多数场景下的UI预期。 ## 技术原理分析 这个问题的根源在于Mapbox/MapLibre的DOM结构设计: 1. **Mapbox/MapLi...

gitblog_00025的博客 497

字节跳动消息队列深度剖析:从BMQ架构到重复消费实战

消息队列作为分布式系统的核心基础设施,承担着解耦、异步、削峰填谷的关键职责。从Kafka到自研BMQ,字节跳动通过存储计算分离架构与EC纠删码技术解决了海量数据下的存储成本与扩展性难题。深入理解Topic、Partition、Consumer Group与Offset机制,是掌握消息队列原理的基础。消息重复消费无法完全避免,需通过幂等设计、手动提交Offset等手段兜底。同时,从嵌入式FreeRTOS消息队列到分布式消息中间件,生产者-消费者模型一脉相承。本文结合字节跳动内部实践,剖析消息队列架构演进、重复

weixin_29061509的博客 222

解决deck.gl v9.1.5中MapLibre底图遮挡图层的3个实用技巧

在使用deck.gl v9.1.5与MapLibre底图集成时,许多开发者都遇到过图层被底图遮挡的问题。这个看似简单的显示层级问题,实则涉及WebGL渲染上下文、地图容器堆叠顺序和框架版本兼容性等多方面因素。本文将从实际应用场景出发,通过分析官方示例代码和渲染原理,提供三种经过验证的解决方案,帮助你在项目中快速解决类似问题。 ## 问题现象与技术背景 当使用MapLibre作为底图时,deck...

gitblog_00275的博客 433

logisim实验六:MIPS运算器设计

实验目的 学生理解算术逻辑运算单元(ALU)的基本构成,掌握 Logisim 中各种运算组件的使用方法,熟悉多路选择器的使用,能利用前述实验完成的 32 位加法器、 Logisim 中的运算组件构造指定规格的 ALU 单元。 设计要求 利用前面实验封装好的 32 位加法器以及 logisim 平台中现有运算部件构建一个 32 位算术逻辑运算单元(禁用 Logisim 系统自带的加法器,减法器),可支持算术加、减、乘、除,逻辑与、或、非、异或运算、逻辑左移、逻辑右移、算术右移运算,支持常用程序状态标志(有符号

gyp0205的博客 2万+

Sentaurus TCAD学习——Scheme编程语言

sentaurus scheme语言学习记录

摸摸小熊猫的博客 968

PopupWindow使用过程中容易出现的问题

项目中有强制更新需求,要求打开app时发请求检查是否有强制更新,如果有强制更新需要跳到更新页面并弹窗。 😏😏😏 听到需求时的我:😏😏😏(十分钟搞定) 很快写完PopupWindow,但是运行的时候 😱😱😱 见鬼,PopupWindow.showAtLocation()这行报错了…… Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is yo

weixin_45031666的博客 2207

【以太网硬件九】1000base-X是什么?

简要描述1000base-X物理层规范

highman110的博客 1万+

Deck.gl 相关

github:https://github.com/uber/deck.gl 官网:https://deck.gl/ demo:https://deck.gl/#/examples/ 1. 到https://www.mapbox.com/申请 Key; 2. clone github项目下来; 3. 进入 /examples/website 目录下的任意一个文件夹; 4....

又是再见? 2892

智能家居系统设计:基于MATLAB的智能家居系统设计和仿真,包括智能家居控制、家庭能源管理和家庭安全监控

基于 MATLAB 的智能家居系统设计方法可以有效地解决各类智能家居问题。

走向CTO的路上... 1775

WblockCloneObjects克隆一个图纸内的实体包括块参照,同名块参照的处理

public static void HeBingTu2(double lieJu, List<string> filePaths) { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; using (DocumentLock docLock = doc.Lock...

1108

PopupWindow报错android.view.WindowManager$BadTokenException的问题解决

android.view.WindowManager$BadTokenException 出现这个问题 百度找的全是说上下文的 是过一遍后,都是无效 最后发现 PopupWindow中的 Button没问题   报错是因为Spinner 之后找到了解决的办法  只要在Spinner的布局文件中加上  android:spinnerMode="dialog" 就OK了

baidu_30371351的博客 1482

实战!用Python爬取海关总署进出口贸易数据 —— 从反爬突破到数据可视化全流程指南

{"period": "2026-05", "country": "美国", "import_val": 123.4, "export_val": 567.8, ...}研究员可构建领先指标模型;fig = px.bar(top, x="country", y="total_usd", title="贸易总额TOP10")html.H1("海关进出口数据看板", style={"textAlign": "center"}),"""发起带签名的POST请求(实际为GET + query param)"""

2201_76125261的博客 592

android开发之popupwindow的使用及细节

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

qq_34875967的博客 592

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

PopupWindow的使用细节以及今天遇到的小问题

PopupWindow设置背景颜色,点击其他地方,pop会自动消失 PopupWindow消失后的响应事件:setOndismissListener(); 在初始化PopupWindow时注意要setFocus(true),有些机型如果不设置焦点就不会响应里面条目的点击事件 今天遇到的小问题,在创建桌面快捷方式时,代码没错,就是没有成功的创建桌面快捷方式,最后发现是没有设置创建桌面快

a516972602的博客 2548

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

android PopupWindow空指针异常问题 低版本的小细节

这段时间在用PopupWindow做界面的更多操作菜单,发现一个很奇异的问题; 在创建继承PopupWindow的自定义弹出菜单,在高版本的安卓系统中是没有任何问题,但是在2.x系列的系统中就会奔溃,报错的信息如下: 异常信息:  Exception: null 堆栈信息:  android.widget.PopupWindow.setContentView(PopupWin

nosxcy的专栏 1663

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Popupwindow的使用

项目中经常会使用到popupwindow做菜单选项,这个类在使用中有一些经常被遗忘的细节,今天用一个实例来总结一个popupwindow较常用的用法。   效果图:       MainActivity.java: public class MainActivity extends Activity { private ImageButton ibOperationM...

YK_love_GQ的专栏 193

Android之PopupWindow

PopupWindowActivity以及页面布局文件 package com.example.test0508; import androidx.appcompat.app.AppCompatActivity; import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.

question_mark的博客 233

Android用PopupWindow实现新浪微博的分组信息

最终实现效果: [img] [img]http://dl.iteye.com/upload/attachment/0072/9530/7aa0cdac-46bc-3634-a126-caffa770ca31.bmp[/img] [/img] 实现思路: 在一个PopupWindow里放一个ListView,从而来达到分组信息的实现! ...

阿弥陀佛 104

Android PopupWindow的简单显示

Android PopupWindow的简单显示

洋大阔天的博客 756

PopupWindow常见的问题解析

setOutsideTouchable setOutsideTouchable(true),点击非PopupWindow视图区域,直接隐藏PopupWindow。调用setOutsideTouchable(true)会使得点击非PopupWindow视图区域,PopupWindow能够接收到ACTION_OUTSIDE事件,接收到这个事件后执行dismiss。但是在5.0以下需要调用setBack...

android_t34的博客 870

popupwindow的源码分析

闲来无事把popupwindow的源码看了一遍,能力有限只看懂了一部分。下面我们来看看源码: private int mWindowLayoutType = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL; 分析:从这里可以看出来PopupWindow(弹出窗口)实际上是一个子窗口,它是一个独立的类(并不继承于Window)。 public

bobge的IT专栏 1824

android中的popupwindow,Android中PopupWindow简析

均属于笔记,仅供个人参考,有问题欢迎指正PopupWindow使用小结:* 1,点击外围、返回键、自身控件使弹出框消失* menuWindow.setFocusable(true);* menuWindow.setBackgroundDrawable(new BitmapDrawable());* 2,点击外围、自身控件使弹出框消失* 目前无法实现这种消失类型;* 3,返回键、自身控件使弹出框消失...

weixin_42696333的博客 677

PopUpWindow 侧滑菜单

今天在使用PopUpWindow 做一个策划

编程的初衷是什么? 2577

PopupWindow的使用以及ArrayAdatper.notifyDataSetChanged()无效详解

PopupWindow的使用以及ArrayAdatper.notifyDataSetChanged()无效详解

moubenmao的专栏 1500

Android popupwindow的简单使用

先看下效果 1.首页package com.yskj.jh.demopopupwindow;import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle

JH_Manny的博客 616
上一篇: JNI_C语言基础
下一篇: JNI基础
CharonChui
博客等级 码龄12年 66粉丝 134原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值