开源库【CustomPopupWindow】---想怎么弹就怎么弹

Android进阶之路 - 适用于项目的自定义popupWindow 篇如题,这篇文章目前我认为很适用于中小型的项目,因为在初、中级程序员的世界中,以下的效果,大多会使用startActivity携带数据跳转新的Activity用于填充ListView或者是RecyclerView,俩者相比的话资源、效果、性能、内存都有所不同,比较下来的话,我们本章的知识更适用于项目中,当然startActivity的展现方式写起来有的朋友认为会更简单,但是当你学会本章知识的话,这... 阅读详情

最近对PopupWindow封装了一个库,先看一下demo演示:

这里写图片描述

效果说明

  • 提供了六种不同的弹出方式,后面会有详细说明

  • 默认给弹出view加上了灰色背景,but背景位置不支持更改。

  • 弹出view默认在灰色背景中的正中间,也可以自己设置,并可微调

  • 可设置弹出和消失style,如动画效果

  • 点击灰色背景外和背景中非view区弹窗都会消失

技术分析

  • 将传入的view作为子view放入一个灰色的父view(FrameLayout)中
frameLayout.removeAllViews();
frameLayout.addView(contentView, new ViewGroup.LayoutParams(width, height));
  • 获取目标view的位置,结合想实现的效果,就可以确定父view(FrameLayout)的位置
int[] location = new int[2];
parentView.getLocationOnScreen(location);
  • 确定传入的view在父view中的位置:
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) contentView.getLayoutParams();
tryClearGravity();
hasSetGravity = false;
lp.gravity = gravity;
if ((gravity & Gravity.RIGHT) == Gravity.RIGHT) {
     lp.rightMargin = -xOff;
} else {
     lp.leftMargin = xOff;
}
if ((gravity & Gravity.BOTTOM) == Gravity.BOTTOM) {
     lp.bottomMargin = -yOff;
} else {
    lp.topMargin = yOff;
}
contentView.setLayoutParams(lp);
  • 最后用PopupWindow的showAsDropDown或showAtLocation方法显示弹窗。
popupWindow.showAsDropDown(parentView, 0, 0);

或者

popupWindow.showAtLocation(parentView, Gravity.NO_GRAVITY, location[0], location[1] - popupWindow.getHeight());

库使用方法

1. 在项目的build.gradle文件最后添加:
allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}
2. 在module的build.gradle文件中添加:
 dependencies {
    compile 'com.github.Sbingo:CustomPopupWindow:v1.0.0'
 }

####3. 开始使用

  • 新建CustomPopupWindow对象

customPopupWindow = new CustomPopupWindow(PopupWindowActivity.this);

  • 创建要弹出的view

popupTestView = new PopupTestView(PopupWindowActivity.this);

  • 弹出view(共有6种方式,这里只写一种作为示例)
customPopupWindow.showOnBottom(v, popupTestView, 0, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, 0, 100);
可选配置
  • 设置弹窗消失的监听器
customPopupWindow.setDismissListener(new CustomPopupWindow.DismissCallBack() {
      @Override
      public void dismissCallBack() {
            /** do sth you like here */
       }
});
  • 设置弹出view在灰色背景中的位置(默认在正中间)
customPopupWindow.setGravity(Gravity.BOTTOM | Gravity.RIGHT);

可以同时结合各方法中的偏移进行微调。

  • 设置弹出和消失style

    对应于每个show()方法中的style参数,详见下面的说明
    ###方法参数说明
    以 showOnBottom(View parentView, View contentView, int style, int width, int height, int xOff, int yOff)方法为例,它的作用是在目标view下方弹出view,参数说明:

  • parentView

用于确定弹出位置或(和)获取windowToken的view,最好传入目标view。

  • contentView

弹出的view,在演示中为灰色背景中的白色区域。

  • style

弹出和消失时的效果,-1时默认效果,0时无效果,也可传入style资源id,可参照demo。

  • width

弹出view的宽度,可以是
ViewGroup.LayoutParams.WRAP_CONTENT、
ViewGroup.LayoutParams.MATCH_PARENT、
或者固定像素大小

  • height

弹出view的高度,可以是
ViewGroup.LayoutParams.WRAP_CONTENT、
ViewGroup.LayoutParams.MATCH_PARENT、
或者固定像素大小

  • xOff

弹出view在灰色背景中的水平偏移

  • yOff

弹出view在灰色背景中的竖直偏移

其余还有5个方法,分别是:
showOnTop、showOnLeft、showOnRight、showOnScreenBottom、showFullScreen,
相信看了名字就知道它们的作用,各参数的意义也和上面的说明一样。

源码和demo在这里

如果觉得有用,不妨顺手点个Star,谢谢。

Android自定义PopWindow完整教程与实战示例 在Android开发中,作为一类灵活且可高度定制的弹出式UI组件,其核心优势在于开发者可以完全掌控其内容视图、布局结构与交互逻辑。然而,这种自由度也意味着必须从零开始构建一个稳定、高效且可复用的弹窗体系。本章将系统性地阐述如何通过合理的资源组织、视图加载机制以及实例化配置,完成一个具备生产级质量的自定义基础架构。我们将深入探讨布局设计的原则与性能优化策略,解析在动态加载过程中的关键作用,并剖析构造过程中各属性设置对最终行为的影响。 阅读详情

相关推荐

自定义popupWindow修改版

自定义popupWindow修改版

qt 自定义窗口customwindow

原文链接:https://qt.developpez.com/tutoriels/braindeadbzh/customwindow/

qq_25160759的博客 680

雷电模拟器9.0最新过检测实战:从修改Build.prop到Xposed模块配置全流程

本文提供了一套针对雷电模拟器9.0的深度伪装实战方案,旨在绕过应用检测。内容涵盖从理解检测机制、获取Root权限、修改Build.prop等静态伪装,到利用Xposed/LSPosed框架进行运行时Hook的动态伪装全流程,帮助用户构建无痕的“真机”环境以稳定运行应用。

z4a5b6的博客 866

CustomPopWindow 问题

1.设置背景时闪屏 mWindow.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); mWindow.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 2.点击外部消失 第一:首先引入的布局要是wrap_content 第二:.size(ViewGroup.Layo...

qq_34736014的博客 1060

改善电流不匹配的级联电流镜布局设计 2002

模拟金属氧化物半导体 (MOS) 集成电路的性能在很大程度上取决于匹配精度的因素。 电流镜的匹配精度在模拟 IC 性能中尤为重要。 布局技术和器件尺寸被认为是可以在很大程度上改善匹配行为的主要因素。 尽管这些信息很重要,但对这两个因素的研究或研究有限。 在本文中,我们基于 Lan 等人 [1999] 提出的简单电流镜提出了一种新的级联电流镜布局技术。 Cascode电流镜的新布局在参数梯度存在的情况下改善了匹配特性。 讨论了跨晶体管有源区域的阈值梯度对电流镜匹配特性的影响。 使用 SPICE 仿真比较了新

Srfun的博客 4233

保姆级!n8n 公众号自动化:从 0 搭 “写文案 + 生图 + 发草稿” 全流程

【摘要】本文介绍如何利用n8n搭建全自动公众号内容发布流程,涵盖AI文案生成、封面图制作到自动发布的全链路解决方案。通过对接OpenRouter大模型、阿里云百炼生图API及微信官方接口,实现从内容创作到发布的自动化。重点包括:1)n8n微信节点安装配置;2)大模型API授权与提示词优化技巧;3)图片生成与格式转换处理;4)公众号接口授权注意事项;5)草稿自动生成参数设置要点。特别提醒首次配置时需关闭自动发布功能以检查效果,避免格式错误导致发布失败。该方案无需复杂编程,适合运营人员快速搭建自动化内容生产流程

Jacket0603的博客 1594

拒绝无用功,封装一个通用的PopupWindow

作者: 夏至,欢迎转载,但请保留这段申明,谢谢 https://juejin.im/post/5961e03e51882568b13c3308 为了避免重复造轮子,我们一般都会封装一个通用的控件,比如这次,项目中需要用到比较多的 popupwindow ,如果需要一个个写,那么依旧会累死人,而且还是无用功,无意义,所以,封装一个通用的,除了让同事看了直刷666之外,自己还省了很多事情。

夏至的稻穗的博客 2734

足球赛事数据API:开发者生存指南(附真实踩坑记录)

作为一个既爱看球又爱写代码的老宅男,我这些年用过的足球API比看过的比赛还多。从最初被各种API文档折磨到怀疑人生,到现在能闭着眼睛调接口,中间的血泪史够写本书了。今天就把这些经验(和教训)分享给各位同好,特别是那些正在为"老板要做个足球App"而秃头的同行们。文档清晰免费层可用响应格式规范API-Sports免费额度大方支持GraphQL有中文文档(难得!Sportmonks数据全面有Webhook支持按需付费。

Happy0970的博客 2196

通用 PopupWindow,几行代码搞定 PopupWindow 弹窗(续)

一 、前言 前面为了在项目中使用Popupwindow简单方便,自己简易封装了一个PopupWindow,可以在项目很方便的使用。还没有看过的可以去看一下文章介绍,通用PopupWindow,几行代码搞定PopupWindow弹窗,前段时间看到有留言说弹出PopupWindow同时使背景变暗这个功能没有,能不能加上?想着这是个比较常见的需求,因此把它加到了这个库中,本篇文章就简单谈谈怎么实现这...

weixin_34378922的博客 444

双向全桥隔离DC-DC变换器(DAB)的调制优化与挑战解析

本文深入解析了双向全桥隔离DC-DC变换器(DAB)的核心调制技术及其面临的挑战。文章从基础的相移调制(SPS)入手,逐步探讨了扩展相移(EPS)、双重相移(DPS)等进阶策略,并重点分析了电流优化与零电压开通(ZVS)等硬核优化技巧。针对DAB在实际应用中存在的建模困难、多模块并联及数字实现等挑战,提供了实用的应对策略与设计思路,旨在帮助工程师在性能、复杂度与成本之间找到最佳平衡。

weixin_29271053的博客 572

CPG控制网络入门

从线性变换开始推导

妖米的博客 5044

[自定义popupwindow]从View到Listener,撸一个CustomPopupWindow。

前言,最近需求有好多定制弹框,选择框,索性整合一个,查阅一番资料后写这篇文章,有错请指出。 PS:本文适合有基础的小白阅读。 CustomPopupWindow效果图准备工作items的布局popupwindow的布局正式编写CustomPopupWindowMyCustomPopupWindow.java构造initViewitems的adapterdismissshowlistener/cal...

itloser.info的傻傻博客 399

Tesla v100 4张显卡组装机安装vllm和ollama在Ubuntu系统上的安装---AI大模型系统从零开始0032

本文提供Ubuntu22.04系统下vLLM的完整安装指南,适配4×32G Tesla显卡的单机4卡张量并行部署。教程包含:1)硬件要求(Ubuntu22.04、NVIDIA驱动≥535、CUDA12.1+);2)NVIDIA驱动自动安装方法;3)Python3.10虚拟环境配置;4)vLLM官方预编译包一键安装;5)单机4卡启动Qwen3.6-27B模型的完整参数说明(含FP8量化、多进程并行等关键配置)。文末附分布式部署的Ray集群方案参考链接,适用于多机8卡场景。

添柴程序猿的专栏 181

自定义PopupWindow轻松实现从底部弹出

首先,肯定要有动画资源吧,要不怎么弹嘞。啥都不管,先定义两个动画肯定用的着。 <?xml version="1.0" encoding="utf-8"?> <!-- res/anim文件夹下定义 --> <!-- 名为push_bottom_in.xml --> <set xmlns:android="http://schemas.android.com/apk/res/android" >

学海无涯~ 1万+

ROS局部路径规划器插件teb_local_planner流程梳理(上)

在我之前的文章《ROS导航包Navigation中的 Movebase节点路径规划相关流程梳理》中已经介绍过Move_base节点调用局部路径规划器插件的接口函数是computeVelocityCommands,接下来,我们就从这个函数入手梳理一下teb_local_planner功能包的工作流程。

慕羽★的博客 5165

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android 自定义PopupWindow实现悬浮窗效果

有时候我们需要在界面上弹出一个窗口,而Android中弹出窗体有两种方式:一种是AlertDialog,另一种就是PopupWindow,AlertDialog的位置是固定的,而PopupWindow的位置可以任意指定。下面我们使用自定义的PopupWindow来完成以下的效果图:    import android.app.Activity; import android.graphics.

ZuoZuoShengHen的博客 6426

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

位于NP.Avalonia.Visuals包中的有用的通用Avalonia控件

本文介绍了位于NP.Avalonia.Visuals开源库中的几个简单但非常有用的通用Avalonia控件CustomWindow、AutoGrid和LabeledControl。NP.Avalonia.Visuals 也可作为nuget包使用。

寒冰屋的专栏 2762

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

优雅的Android通用PopupWindow库 - CustomPopwindow

优雅的Android通用PopupWindow库 - CustomPopwindow 项目介绍 你是否厌倦了在每个项目中反复编写PopupWindow代码?CustomPopwindow正是解决这个问题的利器,它是一个简单易用的PopupWindow封装库,提供了链式配置的API,使得弹窗的创建变得简洁而优雅。该项目由开发者zhouwei精心设计,不仅简化了代码,还增强了功能,让你的开发体验提升到...

gitblog_00028的博客 1171

【WPF】自定义Windows窗口样式

文章目录前言一、程序文件结构二、具体实现1.资源文件generic.xaml代码2.Window派生类CustomWindow.cs3、普通窗口4、对话框窗口五、实现效果 前言 WPF中的很多控件都可以直接修改其样式,但对于Window控件,无法通过简单的style来修改其样式,本文提供了一个实现任意风格window的方法。 一、程序文件结构 为了实现任意风格的Window,就需要重写Window的默认模板,首先是创建Window的派生类,并创建自定义style,重写DefaultStyleKey属性将

m0_38045338的博客 4585

Android自定义popWindow教程

俗话说没有图说话不硬气! 上图: 说明:演示图最底部的一个红色区域是我在布局文件中添加的.主要是为了说明自定义popWindow的自下而上弹出时,会将原来的根布局进行遮盖,而不是将布局顶上去.了解一下 popWindow在android中的使用其实很常见.本文就带领你无自定义一个popWindow. 自定义popWindow类: public class CustomPopWindo...

君羊 6382

一个值得收藏的popupWindow

不需要任何其他工具,就是一个类 package com.example.zhouwei.library; import android.content.Context; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.os.Build; import

puyaCheer的博客 580

Android之Window、WindowManager(一):PopupWindow添加浮动窗口内部过程

通常情况下,如果想显示一个界面,首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。本文通过对PopupWindow的实现过程解析,指出添加界面的另外一种方式:直接用WindowManager显示添加或删除View的过程。 一、PopupWindow向Window添加视图的过程 PopupWindow是最简单的浮动窗

我的Android合伙人是你么 4133

【亲测免费】 推荐开源库:RelativePopupWindow — 灵活定位的Android弹窗库

在Android开发中,PopupWindow是我们常用的一种轻量级弹出层组件,它可以在任意位置显示并提供交互。然而,有时我们可能需要更精确地控制PopupWindow相对于某个锚点View的位置。这就引出了我们的推荐项目——RelativePopupWindow。 ## 1. 项目介绍 RelativePopupWindow 是一个Android库,它扩展了原生的PopupWindow,允许

gitblog_00078的博客 518

Popuwindow 简单实用

首先添加的依赖为 compile 'com.example.zhouwei.library:library:1.0.0' 除此之外还有popupwindow 布局 &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/and...

recordCSND的博客 648

PopupWindow 自定义之简单实用包装

久了不看就忘记了,现在把代码贴出来,方便以后查看,不用多说,直接看代码吧 1.自定义customPopupWindow.class文件 public class CustomPopupWindow extends PopupWindow implements View.OnClickListener { private View mPopView; TextView s...

大白 219

Popupwindow封装

1,  废话不多说,先来介绍一下什么是Popupwindow?     (1)Google官方文档给出的介绍:popup window 是一个出现在当前Activity顶层的悬浮容器,可以用来展示任意的View。     (2)常用API: 构造函数public PopupWindow(int width, int height) public PopupWindow(View

MrNoHere的博客 860
上一篇: 华为手机打开log.v和log.d
下一篇: 开源库【FreeRadioGroup】--淡出、自由拖动、自动贴边,类似于苹果的虚拟辅助按钮
binaryshao
博客等级 码龄11年 52粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值