android 浏览器之多窗口方案详解

牛二白瓶的

牛二白瓶的

2016-02-19 09:00

下面是个简单易学的android 浏览器之多窗口方案详解教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!

我们Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。
所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用Activity显然是多余,这个时候,我们如何处理呢?

Android的一个应用在底层也是linux的一个进程,但在上层弱化了进程的概念,抽象出了Activity这样一种交互。代码直接控制的是Activity,用户的交互也是Activity。
Activity是从用户交互的角度抽象出来的一个对象,在概念和使用上和进程相隔离。进程类似一个收养的功能,一个进程可以有多个Activity,不仅可以收养自己当前应用的Activity,
也可以收养其他安装包指定给该进程的Activity,Activity销毁了,进程并不销毁(除非系统需要或代码强制杀死进程)。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

原来,整个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状态。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

android 浏览器之多窗口方案详解

编程语言 网络编程
android 浏览器之多窗口方案详解

QQ浏览器怎么设置多窗口?

手机软件 应用软件
QQ浏览器怎么设置多窗口?

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

qq浏览器多窗口设置教程

浏览器
qq浏览器多窗口设置教程

IE浏览器怎么设置多窗口

浏览器
IE浏览器怎么设置多窗口

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

ie浏览器如何设置多窗口

浏览器
ie浏览器如何设置多窗口

傲游浏览器支持多窗口浏览吗

浏览器
傲游浏览器支持多窗口浏览吗

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Android基础之Fragment与Activity交互详解

Android基础之Fragment与Activity交互详解

解析C++无锁队列的实现代码

解析C++无锁队列的实现代码
下拉加载更多内容 ↓