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

2016-02-19 09:00 115 1 收藏

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

【 tulaoshi.com - 编程语言 】

我们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( ) 却能取得长宽的原因。

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

使用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://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1589125.html

延伸阅读
标签: 浏览器
怎样设置IE8浏览器单窗口变成多窗口 IE8浏览器默认有时会新建一个窗口来打开新页面,我个人不习惯,还是习惯单窗口多标签页的方式来浏览网页,(IE8的说法是在当前窗口的新选项卡、始终在新选项卡中打开弹出窗口)不用在任务栏上切换来切换去的。 设置方法其实很简单,第1步:点击工具,第2步:选择internet选项。下图所示; 第...
标签: Web开发
    Avant Browser是一款功能强大的多窗口浏览器。以Internet Explorer内核为基础,提供了很多特色增强功能,非常适合广大网民使用。具有兼容性强、稳定性好、容易上手、体积小等诸多优点。其快速的网页浏览速度、卓越的安全恢复功能,一进入中国市场便获得良好评价,各大站点的下载数量直线上升。并且它还是完全免费、没有功能...
标签: 浏览器
2345王牌浏览器多标签与多窗口设置   方法一: 在菜单栏工具中选择切换到多窗口模式就可以快速进行转换。 方法二: 打开2345王牌浏览器选项,在常规选项中设置网页打开模式,单击确定后就可以完成设置。
手机QQ浏览器3.0评测:多窗口管理+云翻译 2012年1月12日,腾讯无线联合中关村在线手机频道针对iPhone平台手机QQ浏览器V3.0新版进行了独家首发。在评测V3.0新版之前,我们首先回顾一下上个版本V2.8的更新信息,手机QQ浏览器V2.8针对快速链接进行了优化,让样式更加美观,方便管理。同时也对网址导航布局做了调整。同时,在中转模式下,用手...
标签: Web开发
网页设计遇到最大的麻烦之一莫过于网页对不同浏览器的兼容性问题了,因为IE 6.0 / IE 7.0 / firefox 2 / Opera 9等主流浏览器对CSS解析不近相同,导致设计的页面效果不一样,所以用什么方法可以有效解决不同浏览器不同页面效果的问题呢?广泛被使用的方法就是CSS Hack,即使用特别的CSS定义显示网页在不同浏览器的设计风格,针对不同的浏览器去...

经验教程

473

收藏

20
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部