PopupWindow

初始化



// 获取弹出的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

     */



**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**

**深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**

**因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/1310016155b6e97f569146d787b492f4.png)
![img](https://img-blog.csdnimg.cn/img_convert/ad707fb71049d775507fa2ed6403ac3d.png)
![img](https://img-blog.csdnimg.cn/img_convert/b476e6d90dfc0d8fe9b9283c2d1d3360.png)
![img](https://img-blog.csdnimg.cn/img_convert/554ff477c166fc64ab221d44595b125a.png)
![img](https://img-blog.csdnimg.cn/img_convert/da4b32e4c92298aecb64ecec4941696e.png)
![img](https://img-blog.csdnimg.cn/img_convert/e2622a9a11371831bf03e5912cea6f62.png)
![img](https://img-blog.csdnimg.cn/13f2cb2e05a14868a3f0fd6ac81d625c.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!**

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**

**如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)**
![img](https://img-blog.csdnimg.cn/img_convert/b74f4e234f361aefaf0ba0b33d7e1f97.png)



### 尾声

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Android核心架构进阶知识点,**比如:JVM、高并发、多线程、缓存、热修复设计、插件化框架解读、组件化框架设计、图片加载框架、网络、设计模式、设计思想与代码质量优化、程序性能优化、开发效率优化、设计模式、负载均衡、算法、数据结构、高级UI晋升、Framework内核解析、Android组件内核等。**
![](https://img-blog.csdnimg.cn/img_convert/7073128c3283349cd172b309bdb48442.webp?x-oss-process=image/format,png)

不仅有学习文档,视频+笔记提高学习效率,还能稳固你的知识,形成良好的系统的知识体系。这里,笔者分享一份从架构哲学的层面来剖析的视频及资料分享给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

![](https://img-blog.csdnimg.cn/img_convert/5c5eec2d012ae7bbc605bec3a2a0e992.webp?x-oss-process=image/format,png)

##### Android进阶学习资料库

一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

![image](https://img-blog.csdnimg.cn/img_convert/7bb6c11e8fd74f468701c80ae8d7a4f4.webp?x-oss-process=image/format,png)

##### 大厂面试真题

PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

![](https://img-blog.csdnimg.cn/img_convert/653ef63bdd962156f4c6824477b2bc05.webp?x-oss-process=image/format,png)

**《2017-2021字节跳动Android面试历年真题解析》**

![](https://img-blog.csdnimg.cn/img_convert/3f2689b5fcd89c82d6a30e1946d5f528.webp?x-oss-process=image/format,png)



**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
![img](https://img-blog.csdnimg.cn/img_convert/8c098356c398b47d85220646b8e9d1d5.png)
包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

[外链图片转存中...(img-05zXAuYy-1712865135870)]

**《2017-2021字节跳动Android面试历年真题解析》**

[外链图片转存中...(img-BvCuyYuY-1712865135870)]



**一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
[外链图片转存中...(img-XruMvBTj-1712865135871)]
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值