博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PopupWindow
阅读量:6535 次
发布时间:2019-06-24

本文共 3726 字,大约阅读时间需要 12 分钟。

PopupWindow

效果图

这里写图片描述

Demo

  • Project:
  • File:

初始化

// 获取弹出的PopupWindow的界面View mContentView = View.inflate(context, R.layout.popupwindow, null);// 创建一个PopupWindow并默认获取焦点(如果没有焦点view无法监听到点击事件)PopupWindow mPopupWindow = new PopupWindow(mContentView, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, true);// ***给PopupWindow设置背景mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));mPopupWindow.update();

显示

/** * 显示PopupWindow * * @param parent 父控件 */public void showPopupWindow(View parent) {    // 获取父控件在窗体中的位置    int[] location = new int[2];    parent.getLocationInWindow(location);    // 将PopupWindow显示在指定位置上    mPopupWindow.showAtLocation(parent, Gravity.TOP | Gravity.START, location[0], location[1] + parent.getHeight());}

隐藏

代码控制关闭

/** * 关闭PopupWindow */public void dismiss() {    if (null != mPopupWindow && mPopupWindow.isShowing()) {        mPopupWindow.dismiss();    }}

点击PopupWindow以外任意位置关闭

// 设置PopupWindow之外的其他位置消失mPopupWindow.setOutsideTouchable(true);

返回按钮控制关闭

// 监听点击返回键mContentView.setOnKeyListener(new View.OnKeyListener() {    @Override    public boolean onKey(View v, int keyCode, KeyEvent event) {        switch (keyCode) {            case KeyEvent.KEYCODE_BACK:                // 按返回键关闭PopupWindow                dismiss();                return true;            default:                return false;        }    }});

开关

/** * 开关 * @param parent 父控件 */public void toggle(View parent) {    if (mPopupWindow.isShowing()) {        dismiss();    } else {        showPopupWindow(parent);    }}

封装

package kong.qingwei.combinedchartdemo.view;import android.content.Context;import android.view.Gravity;import android.view.KeyEvent;import android.view.View;import android.view.WindowManager;import android.widget.PopupWindow;import kong.qingwei.combinedchartdemo.R;/** * Created by kqw on 2016/5/17. * MyPopupWindow */public class MyPopupWindow extends PopupWindow implements View.OnKeyListener {
private PopupWindow mPopupWindow; private final View mContentView; public MyPopupWindow(Context context) { // 获取弹出的PopupWindow的界面 mContentView = View.inflate(context, R.layout.popupwindow, null); // 监听点击返回键 mContentView.setOnKeyListener(this); // 创建一个PopupWindow并默认获取焦点(如果没有焦点view无法监听到点击事件) mPopupWindow = new PopupWindow(mContentView, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, true); // 设置PopupWindow之外的其他位置消失 mPopupWindow.setOutsideTouchable(true); } /** * 显示PopupWindow * * @param parent 父控件 */ public void showPopupWindow(View parent) { // 获取父控件在窗体中的位置 int[] location = new int[2]; parent.getLocationInWindow(location); // 将PopupWindow显示在指定位置上 mPopupWindow.showAtLocation(parent, Gravity.TOP | Gravity.START, location[0], location[1] + parent.getHeight()); } /** * 关闭PopupWindow */ public void dismiss() { if (null != mPopupWindow && mPopupWindow.isShowing()) { mPopupWindow.dismiss(); } } /** * 开关 * @param parent 父控件 */ public void toggle(View parent) { if (mPopupWindow.isShowing()) { dismiss(); } else { showPopupWindow(parent); } } @Override public boolean onKey(View v, int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_BACK: // 按返回键关闭PopupWindow dismiss(); return true; default: return false; } }}

使用

// PopupWindowMyPopupWindow myPopupWindow = new MyPopupWindow(context);// 显示 myPopupWindow.showPopupWindow(parentView);// 开关myPopupWindow.toggle(parentView);
你可能感兴趣的文章
<悟道一位IT高管20年的职场心经>笔记
查看>>
volatile和synchronized的区别
查看>>
js操作listbox
查看>>
快速上手git
查看>>
10.30T2 二分+前缀和(后缀和)
查看>>
[emuch.net]MatrixComputations(7-12)
查看>>
vuex视频教程
查看>>
Java 线程 — ThreadLocal
查看>>
安居客爬虫(selenium实现)
查看>>
-----二叉树的遍历-------
查看>>
ACM北大暑期课培训第一天
查看>>
Scanner类中输入int数据,再输入String数据不正常的
查看>>
F. Multicolored Markers(数学思维)
查看>>
Python中cPickle
查看>>
Centos7安装搜狗输入法
查看>>
nodjs html 转 pdf
查看>>
再看BP神经网络
查看>>
SQL学习——基本语法
查看>>
SQL学习——数据类型
查看>>
Content Assist not available at the current location
查看>>