时间:2021-05-20
我们Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。
所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用Activity显然是多余,这个时候,我们如何处理呢?
Android的一个应用在底层也是linux的一个进程,但在上层弱化了进程的概念,抽象出了Activity这样一种交互。代码直接控制的是Activity,用户的交互也是Activity。
Activity是从用户交互的角度抽象出来的一个对象,在概念和使用上和进程相隔离。进程类似一个收养的功能,一个进程可以有多个Activity,不仅可以收养自己当前应用的Activity,
也可以收养其他安装包指定给该进程的Activity,Activity销毁了,进程并不销毁(除非系统需要或代码强制杀死进程)。
原来,整个Android的窗口机制是基于一个叫做 WindowManager,这个接口可以添加view到屏幕,
也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity
或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个
WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。
写一个简单的代码:
Java代码
复制代码 代码如下:
WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
Button view = new Button(this);
view.setText("window manager test!");
WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
mWm.addView(view, mParams);
一般在刚开始开发android时,会犯一个错误,即在View的构造函数中获取getWidth()和getHeight(),
当一个view对象创建时,android并不知道其大小,所以getWidth()和getHeight()返回的结果是0,
真正大小是在计算布局时才会计算,所以会发现一个有趣的事,即在onDraw( ) 却能取得长宽的原因。
使用WindowManager实现悬浮窗口
复制代码 代码如下:
WindowManager.LayoutParams params;
params = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,//TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP;
manager.addView(tmpView, params);
就可以将需要加到悬浮窗口中的View加入到窗口中了:
复制代码 代码如下:
if(view.getParent==null)//如果view没有被加入到某个父组件中,则加入WindowManager中
wManager.addView(view,wmParams);
其中,view为需要放到悬浮窗口中的视图组件。
如果要将其从WindowManager中移除,则可以执行以下语句:
复制代码 代码如下:
if(view.getParent()!=null)
wManager.removeView(view);
android中可按上面的方法增加多个窗口,多个窗口产生的问题:
2. 应用生命周期的问题
当其他应用出现在浏览器主Activity之前时,不论前面弹出了多少个浏览器的子窗口,浏览器的生命周期都进入onPause状态。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
习惯了IE6或者IE8多窗口浏览器浏览模式的朋友,初次在使用360浏览器时候会很不习惯,因为360浏览器打开多个网页都是在同一个浏览窗口打开,一旦从浏览器右上角
手机QQ浏览器怎么设置多窗口?用手机QQ浏览器浏览网页的时候,有没有想过让它像电脑上的浏览器一样多开窗口呢?这样就可以相互切换浏览不同网页,而不用每次都退出一个
360浏览器有多窗口模式即多标签模式还有单窗口模式,像小编就单窗口模式,这样网页打开的话也容易找,今天要告诉大家的是360浏览器窗口怎么合并还有网页被单独拉出来
win10怎么设置世界之窗浏览器缩放显示?世界之窗浏览器是一款绿色安全的多窗口浏览器,但是很多用户对于世界之窗浏览器的使用方法并不熟悉,比如最近一位Win1
win10怎么设置世界之窗浏览器缩放显示?世界之窗浏览器是一款绿色安全的多窗口浏览器,但是很多用户对于世界之窗浏览器的使用方法并不熟悉,比如最近一位Win1