首页
学习
活动
专区
圈层
工具
发布

android界面框架-Window

从纯sdk及framwork的角度看,android中界面框架相关的类型有:Window,WindowManager,View等。下面就以这几个类为出发点来概览下安卓开发的“界面架构”。...再进一步,以ViewTree为整体,再看它和window,系统服务之间的关系可以从整体上把握android中界面框架。...应用层要做的就是准备好Button对象,然后设置好相关布局参数,而Window对象的创建本身最终是通过系统服务完成的。类似Activity那样,Window对象的创建不是new出来的。...窗口类型 前面说过,安卓中的界面划分为一个个窗口,系统运行中各个不同的窗口可以叠加显示。和叠加相关的属性就是Z-ordered,它是正整数。...WindowManagerService 就像Activity的创建一样,Window的创建不是像View那样new出来的。而是通过IPC调用系统服务WindowManagerService完成的。

1.7K80

应用内悬浮窗适配方案实战

作者 大家好,我叫小鑫,也可以叫我蜡笔小鑫; 本人17年毕业于中山大学,于2018年7月加入37手游安卓团队,曾经就职于久邦数码担任安卓开发工程师; 目前是37手游安卓团队的海外负责人,负责相关业务开发...本文将介绍几种实现方案,以及我们踩过的坑 1、方案一:应用外悬浮窗+栈顶权限/生命周期回调 通常实现悬浮窗,首先考虑到的会是要使用悬浮窗权限,用WindowManager在设备界面上addView实现(...= new LayoutParams(mWidth, mHeight); params.setMargins(mLeft, mTop, 0, 0); setLayoutParams(params); 通过更新...SqAddFloatView(this, R.mipmap.ic_launcher).show(this) 3、方案三:WindowManager+应用内层级实现 WindowManger中的层级有如下两个...使用WindowManager的updateViewLayout方法 mWindowManager.updateViewLayout(DragViewLayout.this, floatLayoutParams

2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Android下屏幕锁屏弹窗的正确姿势

    最近在做一个关于屏幕锁屏悬浮窗的功能,于是在网上搜索了很多安卓屏幕锁屏的相关资料,鉴于网上的资料比较零碎,所以我在这里进行整理总结。本文将从以下两点对屏幕锁屏进行解析: 1....如何在锁屏界面弹出悬浮窗 如何监听系统屏幕锁屏 经过总结,监听系统的锁屏可以通过以下两种方式: 1) 代码直接判定 2) 接收广播 1) 代码直接判定 代码判断方式,也有两种方法: a)...Boolean) mReflectScreenState.invoke(pm); } catch (Exception e) { e.printStackTrace() } 2) 接收广播 当安卓系统锁屏或者屏幕亮起...竟然知道了对于系统屏幕监听的方法,那么接下来就是要在屏幕锁屏的时候,弹出悬浮框了,这个的实现方式有两种: 1) 使用WindowManager 2) 使用Activity 目前情况是,使用这两种方式在真机上都可以实现...,如果网友们发现有问题,可以在博客中留言 1) 使用WindowManager 代码如下: private void init(Context mContext) { this.mContext

    3.8K20

    Android FrameWork面试点集合

    .Linux kernel 加载硬件驱动 如硬件驱动/显示驱动/输入驱动/媒体驱动 硬件抽象层解决并适配不同驱动标准,为上层应用提供统一的api 3.C++ framework 创建linux中的第一个用户进程...是由C++代码通过类加载机制加载的,最终调用到了ZygoteInit.java的实例方法 ZygoteInit.java中main方法会启动SystemServer系统服务进程 SystemServer...5.Apps 所有的系统服务都创建成功之后,会执行Launcher启动流程 2....个 AMS 四大组建调度服务(安卓10之后Activity调度交给ATMS) Activity Task Manager Service 安卓10之后Activity调度服务 PKMS 安装,卸载,扫描管理等...Application对象,调用onCreate函数 通过AMS(ATMS)再次启动Activity,进程创建时未启动的那个Activity会恢复继续创建 在ActivityThread中以反射形式创建

    84520

    面试官问我:Andriod为什么不能在子线程更新UI?

    2.正文 天才少年_来到一家公司等待面试中。。。 一个眼睛又大又亮的小姐姐,萌萌的站在我去 的面前。...,makeVisible调用了WindowManager的addView方法,WindowManager是个接口,他的具体实现类是WindowManagerImp,直接看WindowManagerImp...ViewRootImpl对象,后面View的刷新正是通过ViewRootImpl实现的,由于你面试官没有问,这边不展开讨论,不然把我留到天黑,面试官可能有危险,嘿嘿。...赠送一个知识点:真正把mDecor加到WindowManager上是并显示出来在makeVisible()方法中实现的,Activity的Window才能正在被使用。...2)安卓系统中,操作viwe对象没有加锁,所以如果在子线程中更新UI,会出现多线程并发的问题,导致页面展示异常。 小伙子分析得很不错,把我打动了,回去等offer吧。

    1.1K01

    Android高频面试专题 - 提升篇(一)Window、View、Activity

    完成) Window是一个抽象类,唯一实现类是PhoneWindow 创建Window需要通过WindowManager创建,WindowManager是外界访问Window的入口 Window具体实现位于...建立联系 Window并不是实际存在的,而是以View的形式存在 WindowManager的三个接口方法也是针对View的 实际使用中无法直接访问Window,必须通过WindowManager View...系统窗口,不需要对应任何Activity,如:状态栏,导航栏,普通应用程序不能创建系统窗口,必须要有系统应用权限.(层级2000~2999)。...11、Token的使用场景? Activity创建时,AMS中需要根据Token去找到对应的ActivityRecord。...中并显示——在Dialog的show方法中,通过WindowManager将DecorView添加到Window中(mWindowManager.addView(mDecor, 1)) Dialog关闭时会通过

    2.7K20

    C001Android学习笔记-初级控件(一)

    一、屏幕显示 1、像素 安卓支持的像素单位: px(像素)、in(英寸)、mm(毫米)、pt(磅,1/72英寸)、dp(与设备无关的显示单位)、dip(就是dp)、sp(用于设置字体大小); 安卓常用的三种像素单位...: px:手机屏幕上可显示的最小单位; dp:按照屏幕尺寸计量,与物理设备无关; sp:原理跟dp差不多,专用于设置字体大小; 2、颜色 概述: 安卓中的颜色由透明度alpha和RGB(红、绿、蓝)组成...(透明度为FF),在代码中默认为全透明(透明度为00); RGB三色: 数值越小颜色浓度越小越暗,数值越大颜色浓度越大越亮,亮到极致是白色,暗到极致是黑色; 在Android中使用颜色的3种方式: ①使用系统已经定义好的颜色常量...colors.xml中定义的颜色; xml中示例: android:textColor="@color/colorPrimary" 代码中示例: tv1.setTextColor(getResources...,已经是最后一次,其内不能再包含其他子控件或者子视图; ViewGroup视图组: 所有布局视图类都是从ViewGroup派生而来的; ViewGroup的三个方法(也是所有布局类视图共有的方法): addView

    1K10

    悬浮窗开发设计实践

    系统Window:z-index在2000~2999之间,它往往需要声明权限才能创建,例如Toast、状态栏、系统音量条、错误提示框都是系统Window。...第三种:采用服务Service,然后在Service中采用WindowManager添加和移除View操作。那么在Activity中想要展示弹窗则需要通过广播通信,让Service收到广播处理逻辑。...当APP通过WindowManagerService的代理向其添加窗口的时候,WindowManagerService除了自己进行登记整理,还需要向SurfaceFlinger服务申请一块Surface...3.3 应用悬浮窗应用内悬浮窗实现流程1.获取WindowManager;2.创建悬浮View;3.设置悬浮View的拖拽事件;4.添加View到WindowManager中对于应用悬浮窗来说,Android...中申请权限,为了防止用户手动在设置中取消权限,需要在每次使用时check一下是否有悬浮窗权限存在;Settings.canDrawOverlays(this)当API > 25时,系统直接禁止用户使用TYPE_TOAST

    3.7K40

    Android Toast使用技巧--提升展示能力

    App在没有悬浮窗权限下,不能添加系统级窗口,但却可以显示Toast。这说明Toast不在悬浮窗权限控制下,系统中某些机制保证了Toast的显示。...Toast.makeText方法创建的Toast中,nNextView是一个包含TextView的LinearLayout。...(windowManager); } return super.getSystemService(name); } } 3、使用FakeContext创建一个View,并以该View发起一个Toast...适配情况 1、由于Toast机制依赖于NMS,部分机型需要开启通知栏权限才能使用Toast; 2、部分机型在App界面外无法使用Toast,如:OPPO; 3、部分机型在App界面外Toast流程正常执行...,但Toast窗口不会显示,如:Vivo; 4、之前也有直接使用TYPE_TOAST进行addView()添加窗口的做法,但Android8.0之后TYPE_TOAS窗口需要NMS发放的一个token,

    2.5K50

    Android之View绘制问题汇总

    在measure完成后,可以通过getMeasuredWidth/Height()方法,就能获得View的测量宽高 在一定极端情况下,系统需要多次measure,因此得到的值可能不准确,最好的办法是在onLayout...方法中获得测量宽/高或者最终宽/高 6、如何在Activity启动时获得View的宽/高?...) WindowManager.addView(decor, 1) WindowManager.addView(decor, 1)本质是调用WindowManagerGlobal的addView方法。...onDraw中避免冗余代码、避免创建对象 onDraw中禁止new对象。如:不应该在ondraw中创建Paint对象。Paint类提供了reset方法。可以在初始化View时创建对象。...减少冗余代码 不要使用Handler,因为已经有post系列方法,View已经有post系列方法,没有必要重复去写,可以直接使用,最终会投递到主线程的Handler中 使用的线程和动画,要在onDetachedFromWindow

    1.4K20

    Android之WindowManager介绍

    image.png 目录 Android之WindowManager介绍 WindowManager android中真正展示给用户的是window和view. activity在android中所其的作用主要是处理一些逻辑问题...); Window android的窗口分为三种: 1、应用程序窗口 (Application Window): 包括所有应用程序自己创建的窗口,以及在应用起来之前系统负责显示的窗口。...PhoneWindow对象被创建是在Activity中: final void attach(Context context, ActivityThread aThread,...View才是Window存在的实体,在实际使用中无法直接访问Window,对Window的访问必须通过WindowManager。...image.png Window的添加过程需要通过WindowManager的addView来实现,WindowManager是一个接口,它的真正实现是WindowManagerImpl类。

    1.1K20
    领券