首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

悬浮窗开发设计实践

Android显示系统分为3层UI框架层:负责管理窗口中View组件的布局与绘制以及响应用户输入事件WindowManagerService层:负责管理窗口Surface的布局与次序SurfaceFlinger...,它负责窗口的启动、添加和删除。...而Android 8.0对系统和API行为做了修改,包括使用SYSTEM_ALERT_WINDOW权限的应用无法再使用一下窗口类型来在其他应用和窗口上方显示提醒窗口:如果需要实现在其他应用和窗口上方显示提醒窗口...如果在Android 8.0以上版本仍然使用TYPE_PHONE类型的悬浮窗口,则会出现如下异常信息:android.view.WindowManager$BadTokenException: Unable...view避免重复添加(如果已经添加则首先要移除),然后销毁的时候把FloatWindow各种属性设置成null清理6.2 稳定性设计如何避免窗口移动,移动后松手的瞬间触发了点击事件首先设置一个布尔标记

2.3K40

必要掌握!Window、WindowManager !

一般需要开启此标记,否则其他window不能收到事件。 FLAG_SHOW_WHEN_LOCKED,开启后 可以让window显示在锁屏的界面上。 type参数表示window的类型。...Manifest申请该权限是无效的。) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ if (!...使用中是通过WindowManager对的操作,无法直接访问window。下面就看看WindowManager的三个方法。...WindowManagerService主要作用: 窗口管理:是先进行窗口的权限检查,因为系统窗口需要声明权限,然后根据相关的Display信息以及窗口信息对窗口进行校对,再然后获取对应的WindowToken...,再根据不同的窗口类型检查窗口的有效性,如果上面一系列步骤都通过了,就会为该窗口创建一个WindowState对象,以维护窗口的状态和根据适当的时机调整窗口状态,最后就会通过WindowState的attach

1.5K30

Android Hook技术详解

这里,我们就找到hook点了就是mInstrumentation,我们只要自定义一个instrumentation替换掉即可,下面贴下代码,代码中都有注释,原理懂了,代码理解起来就很方便了。...工具类:FieldUtil.java 自定义instruction:ProxyInstrumentation.java controll操作类:HookUtil.java 然后Application...在WindowManager要添加这个Toast的时候会去校验这个token,如果token有效,则添加窗口无效则报crash。...通常情况下是不会出现这个问题的,但是在某种情况下Android 进程某个 UI 线程的某个消息阻塞,导致toast.show()方法一直无法被调用,这个的同时NotificationManager的超时检测结束...=TYPE_TOAST的类型的toast不能重复添加,所以这样也会报一个BadTokenException,接下来我们就要通过这个demo,用hook的解决方案来解决这个异常。

3.3K60

Android悬浮窗的实现(易错点)

而Android 8.0对系统和API行为做了修改,包括使用SYSTEM_ALERT_WINDOW权限的应用无法再使用一下窗口类型来在其他应用和窗口上方显示提醒窗口: – TYPE_PHONE...如果在Android 8.0以上版本仍然使用TYPE_PHONE类型的悬浮窗口,则会出现如下异常信息: android.view.WindowManager$BadTokenException: Unable...不过基础的原理是已经实现了,剩下的就是要在这上面一点点的添加功能啦。 3. 增加小功能 3.1 拖动功能   首先想要增加的功能就是能够拖动这个悬浮窗。...= null) { ((ImageView) displayView.findViewById(R.id.image_display_imageview)).setImageResource(images...3.3 视频小窗口   下面我们就来看看悬浮窗最常用的功能:视频小窗口。例如微信在视频过程中退出界面,就会以小窗口的形式来显示视频。

3.1K10

Android | 理解 Window 和 WindowManager

PhoneWindow 中的 DecorView 最终也是附加到 Window(窗口)上面的。 因为在最开始的时候经常把二者搞混,Window 即是 View 管理者,也是窗口,显然是不合理的。...Window 显示的特性,例如: Floags 特性 FLAG_NOT_FOCUSABLE 表示 Window 不需要获取焦点,也不需要各种输入事件,此标记通同时启用 FLAG_NOT_TOUCH_MODAL...在实际开发中无法直接访问 Window,对 Window 访问必须通过 WindowManager Window 的添加过程 Window 的添加需要通过 WindowManager 的 addView...$BadTokenException: Unable to add window -- token null is not valid; is your activity running?...Toast 属于系统 Window,内部视图有两种定义方式,一种是系统默认的,另一种是通过 setView 方法来指定一个 View(setView 方法在 android 11 以后已经废弃了,不会再展示自定义视图

76720

Android知识点

但是如果遇到对象嵌套,譬如 if(object.child == null) 的情况,如果一开始 object 就是个 null 对象,可想而知程序在执行条件语句判断时就会报 NullPointerException...例如在activity的onCreate方法里面调用popupwindow的show方法,有可能由于activity没有完全初始化导致程序异常(android.view.WindowManager$BadTokenException...在ScrollView中添加一个Android:fillViewport="true"属性就可以了。顾名思义,这个属性允许 ScrollView中的组件去充满它。...当无法通过搜索解决问题的时候,读源码是最快的解决思路。千万不要瞎猜和尝试随缘写代码来解决问题。...mMyWalletPresenter.reqRanking(position);//[2周排行,1总排行] } } CardView 使用android:background设置背景颜色无效

62910

Android窗口管理分析(3):窗口分组及Z-order的确定总结

窗口的Z次序管理:窗口的分配序号、次序调整等 WMS中窗口次序分配如何影响SurfaceFlinger服务 在WMS窗口添加一文中分析过,窗口添加是通过WindowManagerGlobal.addView...android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application...--关键点1,必须找到子窗口的父窗口,否则添加失败--> WindowState attachedWindow = null; if (type >= FIRST_SUB_WINDOW...--关键点2 如果Activity第一次添加窗口 ,子窗口分组对应的WindowToken一定是null--> boolean addToken = false; WindowToken...Z order.jpg 前面分析了窗口分组的时候涉及了两个对象WindowState与Windtoken,但仅限分组,分组无法决定窗口的显示的Z-order,那么再WMS是怎么管理所有窗口的Z-order

2.4K50

【错误记录】Java AWT 图形界面编程问题 ( 组件按照布局要求设置后无法显示等各种问题 )

---- 先显示 Dialog 对话框 , 然后根据操作需求生成指定数量的组件 , 显示在对话框中 ; 动态添加组件后 , 发现添加组件无法显示 ; 最后发现需要在添加后 , 调用一次 Frame...#setVisibility(true) 方法 , 设置以下窗口的可见性 , 最终才能将动态添加组件更新上去 ; 只要组件发生了改动 , 就调用一次 Frame#setVisibility(true)...窗口设置组件位置失效 ---- 在 Frame 窗口 中设置组件 的位置和大小 , 发现设置无效 ; 最终发现 Frame 窗口的默认布局是 BorderLayout , 默认添加组件添加在中心的 ,...默认填充整个 CENTER 区域 ; 如果想要在窗口中精确控制某个组件或容器的显示位置和大小 , 那么就要取消 Frame 窗口的默认布局 , 调用 Frame#setLayout(null) 取消布局...容器中 , 向其中添加组件默认填充整个布局 , 这里需要设置大小来限制布局 ; 使用 Component#setSize 设置的大小是无效的 ; 必须使用 Component#setMaximumSize

61710

Android Toast自定义显示时间

常规使用方法这里不做说明,继前一篇博客《Android中Toast全屏显示》 ,其中抛砖引玉的给出一个简单的实现Toast全屏显示的方法后,发现无法控制Toast的显示时长。...2、利用WindowManager的addView()方法动态刷屏,可看见博客《Android自定义Toast,可设定显示时间》 。...该方法被很多软件用来显示浮动窗口和图片的动态悬浮效果,如360手机软件和一些手游软件。在Android4.0上是一种不错的选择。当然,对于遇到系统默认把悬浮窗口功能关闭的手机,这招可能就不灵了。...通过分析Toast的显示原理和弹窗控制逻辑,本人借助Handler和Runnable机制,也成功实现了对Toast显示任意自定义时长。...android.os.Handler; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; import android.view.WindowManager

2.8K31

Window源码分析之Activity篇

前言 Window表示一个窗口的概念,在日常开发中直接接触Window的机会并不多,但是在某些特殊时候我们需要在桌面上显示一个类似悬浮窗的东西,那么这种效果就需要用到Window来实现...是一个抽象类,具体的实现是PhoneWindow; android系统中,每个界面,对应着一个Window;但其实在android系统中Window也是一个抽象的概念,它是以View的形式存在;在使用中, 无法直接访问...是没有parentWindow的 return new WindowManagerImpl(mDisplay, parentWindow); } 第四步 Window时我们看见的窗口.... // 调用 WMS添加window, 并返回一个结果 用于判定添加的结果 res = mWindowSession.addToDisplay(mWindow, mSeq, mWindowAttributes...; case WindowManagerGlobal.ADD_NOT_APP_TOKEN: throw new WindowManager.BadTokenException

63440

Android 复习笔记 —— 扒一扒 Context

mBase.getResources(); } ...... } 这是一个典型的 装饰者模式,也叫做 修饰模式,以下来自维基百科: 修饰模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式...就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。 通过使用修饰模式,可以在运行时扩充一个类的功能。...注意 attach() 方法中的 setWindowManager() 方法中的 mToken 参数,这决定了 Application Context 无法创建和显示 Dialog 。...这里并不是直接返回原生的 ContextImpl 对象,而是调用 context.getReceiverRestrictedContext() 返回一个 受限制 的 ReceiverRestrictedContext,你无法使用这个...使用 Application 的 Context 创建 Dialog 并显示,会报如下错误: Caused by: android.view.WindowManager$BadTokenException

43910

Sketchup pro 2021 Mac 草图大师2022激活版下载

知识兔我们正在为SketchUp及其应用程序套件添加标记。知识兔这意味着SketchUp,LayOut,3D模型库,知识兔扩展模型仓库和样式生成器的新应用程序图标,知识兔以及一些修改后的工具栏图标。...修复了“跟随我”工具无法按知识兔预期清理几何的问题。修复了状态栏不会为“选择知识兔”工具显示键修改器文本的问题。修复了卷尺测量工具的问题,知识兔在该问题中,按快捷键会导致向导状态意外更改。...发现无效组件关系时,知识兔添加了新的有效性检查。当尺寸标注使用无效字体时,知识兔添加了新的有效性检查。添加了一个修复程序,用于在知识兔模型错误检查发现北方向无效时将北方向设置为绿色轴。...当发现/修复了一些无效组件知识兔关系时,启用了新的有效性检查。修复了在打开模型时进行有效性知识兔检查之后,“撤消检查有效性”选项不可用的问题。...在“模型信息”窗口的“文知识兔件”信息中删除了“版本”字段。修复了相同的水印名称不知识兔能由不同样式共享的问题。

1.2K10

android toast显示时间,Android Toast自定义显示时间「建议收藏」

常规使用方法这里不做说明,继前一篇博客《Android中Toast全屏显示》 ,其中抛砖引玉的给出一个简单的实现Toast全屏显示的方法后,发现无法控制Toast的显示时长。...2、利用WindowManager的addView()方法动态刷屏,可看见博客《Android自定义Toast,可设定显示时间》 。...该方法被很多软件用来显示浮动窗口和图片的动态悬浮效果,如360手机软件和一些手游软件。在Android4.0上是一种不错的选择。当然,对于遇到系统默认把悬浮窗口功能关闭的手机,这招可能就不灵了。...通过分析Toast的显示原理和弹窗控制逻辑,本人借助Handler和Runnable机制,也成功实现了对Toast显示任意自定义时长。...android.os.Handler; import android.util.DisplayMetrics; import android.util.Log; import android.view.Gravity; import android.view.WindowManager

2.4K20
领券