问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

不依赖Activity、Dialog显示View方法

发布网友 发布时间:2023-04-26 02:11

我来回答

1个回答

热心网友 时间:2023-10-17 15:47

一、首先我们先看下Activity是如何显示View
平常我们在Activity的onCreate会调用setContentView(R.layout.xxx),Activity启动过程与window的源码流程可参考
Activity Window WMS的源码关系流程介绍
总结几个步骤:
1、创建Activity:ActivityThread的performLaunchActivity函数中创建Activity后,调用Activity.attach函数
2、创建PhoneWindow:Activity.attach函数中创建与之关联的PhoneWindow,PhoneWindow会创建DectorView。
3、添加视图:setContentView添加到PhoneWindow的DectorView中
4、关联PhoneWindow到WMS中:ActivityThread实行完performLaunchActivity,会handleResumeActivity,走到Activity的onResume,然后设置Activity的PhoneWindow的type类型:

PhoneWindow会创建DectorView,通过WindowManagerImpl-->WindowManagerGlobal-->ViewRootImpl-->(binder)WMS中的Session的addToDisplay函数,这样视图就会显示出来。
我们看下l.type = WindowManager.LayoutParams.TYPE_BASE_APPLICATION;

WindowManager.java:

从英文翻译来看,这个type是应用程序的window类型。

二、Dialog显示View:

我们顺着alertDialog.show():

其中final AlertDialog dialog = new AlertDialog(P.mContext, 0, false);

super是Dialog,接着看Dialog的构造函数:

这边会创建Dialog的PhoneWindow,我们看PhoneWindow的构造函数

父类Window的

看WindowManager.LayoutParams:

这个type的默认window类型是TYPE_APPLICATION:

这个Dialog的window就需要依赖Activity来显示了。
三、直接使用系统级的Window类型,来添加View:

这个context上下文可以是service、application的。
其中layoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;

这是系统级的window

如何让一个AlertDialog不受activity的影响

你可以在另外一个activity的oncreate中显示相同的一个dialog,如果有数据,把数据传递过来。但是界面可能会闪一下。

Android 全局弹窗(Dialog)快速实现

我采用 集合法 来实现的退出登录 ,在BaseActivity中记录所有打开过的Activity,然后遍历清除。然后在 BaseActivity 中调用 addActivity() ,不在赘述!如果能获取到用户当前观看的界面,然后将上下文传过去,就可以实现全局Dialog 当前页面也就是栈顶Activity,也就是最后添加的那个Activity。如下:然后在使用的...

...能实现这个功能,就是弹出的时候还可以操作原来的activity view...

可以用popupWindow来实现 popupWindow.setFocusable(true);popupWindow.setAnimationStyle(android.R.style.Animation_Dialog);popupWindow.setBackgroundDrawable(new BitmapDrawable());popupWindow.setOutsideTouchable(true);加上这几句话就可以了 ,跟dialog有相同的效果 Dialog也可以实现,但是我没有研究,你可以...

非Activity的类中,怎么才能调用AlertDialog

在非Activity的类中,我打算在catch捕捉到错误后,用AlertDialog显示出来,但是无法填写context参数;另外由于这段函数不能返回到调用其Activity的类中,所以现在有点想不出怎么解决好了 ---解决思路--- 可以把context传进去 ---解决思路--- 你这个写一个带Context的构造方法。

Android Dialog如何显示在空间的下面

PopupWindow 是一个可以显示在当前 Activity 之上的浮动容器,PopupWindow 弹出的位置是能够改变的,按照有无偏移量,可以分为无偏移和有偏移两种;按照参照对象的不同又可以分为两种:相对某个控件(Anchor 锚点)的位置和在父容器内部的相对位置。LayoutInflater mLayoutInflater = (LayoutInflater) context.get...

怎么使dialog失去焦点而不消失,activity获得焦点

不可以 dialog的机制就是当dialog出现的时候 当前活动的焦点会被掠夺

android dialog 怎么设置全屏

默认的Dialog是不能全屏的。也就是怎么设置Dialog的Layout都没用的。面给出实现Dialog实现全屏的两种方式:1、代码实现。这中方法相对比较简单 首先继承Dialig,然后再构造函数中添加 super(context, android.R.style.Theme);setOwnerActivity((Activity)context);2、XML实现 首先,在values文件中添加一个...

可以透过NDK弹出对话框Dialog吗

传入主activity的content就行了,用activity弹出就可以了吧。如果要用同一对话框窗口,就改写dialog的view,使得其有下一页

Dialog与PopWindow的区别

默认情况下是不能够在onCreate时显示;所以如果想要在界面显示的时候就弹出PopupWindow 需要重写onWindowFocusChanged方法,判断activity完全显示,并且已经拿到焦点,此时 才能进行显示;否则会报出异常:android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is ...

dialog 启动 fragment 怎么处理???

是不是可以这样写,把fragment加在viewpager 上面 。然后 比如说我在viewpager页面1 的时候对应的是fragment1 我想通过这个dialog 上面的按钮跳到 fragment3 也就是viewpager3 的话 ,是不是可以直接设置viewPager.setCurrentItem(3);如果是不同的activity 的话 用intent 传一个值过去,接到的时候在...

网络显示依赖服务或无法启动 电脑显示依赖服务或组无法启动 我不知道依赖他人的方法9 我不懂的依赖他人的方法 pom 显示依赖 网络显示依赖的服务或者组 依赖他人的方法13 让女人依赖你的方法 减少网络依赖的方法
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...这一夜你还会为他熬夜吗?你有什么最想对他说的? 西南大学党委宣传部主要职责 平衡车进水晒干能用吗 平衡车进水了怎么办?可以晒吗? 客厅装修需要哪些电位 遗产继承如何规定 郴州酒店有哪些 郴州最大的酒店排名,郴州市内景区酒店 郴州酒店排名前十名,郴州旅游住酒店推荐 求生欲是什么意思? 翡翠手镯太小怎么戴 翡翠手镯小了怎么戴进去 求英语达人帮忙翻译两段英文论文, pintle.spool.regularbreake.tensionadder.pdyofcradle.gearchange.breakwiredector.翻译中文 “充电器,资料线”英文都怎么说 带有诗句的表情包 供拟的诗句供拟的诗句是什么 添注的诗句添注的诗句是什么 梦见飞着走路的预兆 免费小说推荐? 威客网的中国首创 寸刃的网络解释寸刃的网络解释是什么 寸楮的网络解释寸楮的网络解释是什么 寸忱的网络解释寸忱的网络解释是什么 螺丝肉的家常做法 情话大全浪漫情话段子 ima会员号和用户编号一样吗 上海电子营业执照没有二维码 虬髯客的意思虬髯客的意思是什么 适合失眠者的催眠曲 管制的期限最高是多少 肃此的网络解释 肃此的网络解释是什么 怎么面对把你拉黑的人 何为“圆满” 什么字意思圆满 功德圆满的解释 家庭毛巾清洗方法(彻底清洗毛巾的方法?) 握发殿的拼音狐握发殿的拼音是什么 二级老师被校拒绝参与进修是否合理 教师的法定权利有哪些? 为什么学校不能剥夺教师的进修权利 教师享有的权利不包括哪些 教师的权利和义务 玄墨公子是什么意思 玄墨老师是谁 墨客的意思墨客的意思是什么 我的手机如何办4G curious用法 猜谜语丈夫腆着啤酒肚妻子穿着健美裤打一成语谜底是什么 歇后语猪八戒穿健美裤的下半句是什么? 在商场理卖衣服到月底怎么查货? 电脑上现存量怎么查找