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

 更新时间:2013年07月26日 10:15:17   投稿:jingxian  
android 浏览器之多窗口方案详细介绍,需要的朋友可以过来参考下

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

Android的一个应用在底层也是linux的一个进程,但在上层弱化了进程的概念,抽象出了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状态。

相关文章

  • Android基于Pull方式解析xml的方法详解

    Android基于Pull方式解析xml的方法详解

    这篇文章主要介绍了Android基于Pull方式解析xml的方法,结合实例形式详细分析了Pull方式解析xml的原理、操作步骤与相关技巧,需要的朋友可以参考下
    2016-07-07
  • Android 获取drawable目录图片 并存入指定文件的步骤详解

    Android 获取drawable目录图片 并存入指定文件的步骤详解

    这篇文章主要介绍了Android 获取drawable目录图片 并存入指定文件,本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • Android轻松画出触摸轨迹

    Android轻松画出触摸轨迹

    这篇文章主要为大家详细介绍了Android轻松画出触摸轨迹的实现方法,为大家分享了一个触摸轨迹类,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Android实现原生分享功能

    Android实现原生分享功能

    这篇文章主要介绍了Android实现原生分享功能,只能分享文字和图片,不能单独分享图片或者文字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 详解Android WebView加载html片段

    详解Android WebView加载html片段

    本篇文章主要介绍了详解Android WebView加载html片段,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 实例详解Android 获取短信会话列表

    实例详解Android 获取短信会话列表

    本文通过实例详解android获取短信会话列表的全部内容,涉及到android获取短信列表的相关知识,对android会话列表相关知识感兴趣的朋友一起学习吧
    2015-12-12
  • Android实现简单MD5加密的方法

    Android实现简单MD5加密的方法

    这篇文章主要介绍了Android实现简单MD5加密的方法,涉及Android编码操作及加密的相关实现技巧,需要的朋友可以参考下
    2016-08-08
  • 为什么不要在 Flutter 中使用全局变量

    为什么不要在 Flutter 中使用全局变量

    这篇文章主要介绍了为什么不要在Flutter中使用全局变量,全局变量是公共变量,可以被Flutter程序中的每个方法和对象访问,全局变量是局部变量的替代品,它们在方法中创建并在该方法中访问
    2022-08-08
  • Android实现GridView中ImageView动态变换的方法

    Android实现GridView中ImageView动态变换的方法

    这篇文章主要介绍了Android实现GridView中ImageView动态变换的方法,以实例形式较为详细的分析了GridView中ImageView动态变换的页面布局及功能实现相关技巧,需要的朋友可以参考下
    2015-10-10
  • Android 中SP与DP的区别实例详解

    Android 中SP与DP的区别实例详解

    这篇文章主要介绍了Android 中SP与DP的区别实例详解的相关资料,需要的朋友可以参考下
    2016-10-10

最新评论