`
muyu114
  • 浏览: 129951 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

[Android 界面] WindowManager的使用

 
阅读更多

写Android程序的时候一般用WindowManager就是去获得屏幕的宽和高,来布局一些小的东西。基本上没有怎么看他的其他的接口。

这两天想写一个简单的类似于Toast的东西,自定义布局,突然发现,原来Toast的时间是不能自己定义的,只有两个固定的时间,分别是2秒和3.5秒。我的需求是自定义显示的时间,这个显然不能满足我的需求。但是它是如何做到显示一个View凌驾于现有的所有的View之上的呢?

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

原来,整个Android的窗口机制是基于一个叫做WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。

写一个简单的代码:

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);

我们这个button的显示和当前的运行环境基本上是无关的,当前是什么activity或者是桌面,使用这个底层的结果给你的编程带来很大的灵活性,但是要注意,显示出来就要销毁掉,这个是必须的,销毁其实就是一个remove。

但是仅仅这么写会有个问题,就是view显示在最上层,但是后面的view无法获得焦点,当你touch的坐标超出上次view的范围时

mParams = new WindowManager.LayoutParams();
mWm.updateViewLayout(view, mParams);

需要后面的view获得焦点时:

mParams.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE

| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mWm.updateViewLayout(view, mParams);

分享到:
评论

相关推荐

    Android WindowManager悬浮显示歌词

    一个WindowManager悬浮窗,悬浮显示歌词效果。WindowManager背景设置为了透明色,显示的WindowManager关闭启动它的Activity回到主界面仍然有效。仅供参考............

    Android中WindowManager与WMS的解析

    在android中,无论我们的app界面,还是系统桌面,再或者是手机下方的几个虚拟按键和最上方的状态栏,又或者是一个吐司。。。我们所看到的所有界面,都是由一个个悬浮窗口组成的。 但是这些窗口有不同的级别: 系统...

    一个全屏显示的Android注册界面示例

    一个简单的Android注册界面,在注册时支持全屏显示,通过下列两句实现:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);隐去状态栏部分电池等图标...

    Android 悬浮窗功能实现(微信语音通话悬浮窗效果实现)

    Android 界面绘制都是通过 WindowManager 服务来实现的,WindowManager 对象可通过获取 WINDOW_SERVICE 系统服务得到,并因为 WindowManager 继承于 ViewManager ,所以其拥有以下方法 addView(View view, ...

    BiliBili-基于ijkplayer rxjava retrofit,组件化思想,实现一个仿B站的Android客户端.zip

    使用ijkplayer,实现一个仿B站的Android客户端。使用组件化的思想对项目进行拆分,目前分出两个组件,一个是网络请求组件,一个是视频播放组件。组件化实现方案组件化使用的方案出自张华洋的文章:Android组件化方案...

    不依赖于Activity的Android全局悬浮窗的实现

    前言 当我们在手机上使用360安全卫士时,...Android悬浮窗实现使用WindowManager WindowManager介绍  通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象。 每一个WindowManager对象

    Android自定义对话框

    但是Android系统为我们提供的对话框样子和我们精心设计的界面很不协调,在这种情况下我们想很自由的定义对话框,或者有的时候我们的对话框是一个图片,没有标题和按钮,例如这样的一系列需求,这一篇文章我们来给...

    Android 6.0+ 项目开发中用到适配功能

    1:在android6.0之后使用WindowManager需要使用者认真同意跳入一个界面 ... 代码解决: ... // Android6.0+ WindowManager使用  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {  if (!Settin

    Android编程之界面实现全屏显示的方法(2种方法)

    本文实例讲述了Android编程之界面实现全屏显示的方法。分享给大家供大家参考,具体如下: 在开发android的应用当中,我们会遇到将一些界面设置为全屏显示的格式,有两种实现的方法。其一是在Java代码中实现,其二是...

    通过案例分析Android WindowManager解析与骗取QQ密码的过程

    Windows Manager是一款窗口管理终端,可以远程连接到Linux的X桌面进行管理,...Window&&WindowManager介绍  分析demo之前,先要整理总结一下相关的知识。先看看Window类,Window是一个抽象类,位于代码树frameworks\u0

    Adroid UI 界面绘制原理分析

    Android UI 界面绘制原理分析: 渲染流程:当用户与 Android 设备进行交互时,系统需要不断地将用户的输入转化为屏幕上的视觉反馈。为了保持流畅的用户体验,Android 系统要求每一帧的渲染都必须在 16ms 内完成。这...

    android从底部弹出qq样式窗体

    android从底部弹出qq样式窗体,利用WindowManager来使一个界面在另一个界面上显示,从而实现从底部弹出的一个菜单

    android开发使用例子

    要使用这个必须在配置文件中加入<uses-permission id="Android.permission.CALL_PHONE" /> 发送SMS/MMS 调用发送短信的程序 1. Intent it = new Intent(Intent.ACTION_VIEW); 2. it.putExtra("sms_body", "The ...

    Android雷达扫描动态界面制作

    先看看效果图: ...import android.view.WindowManager; import com.zihao.radar.view.RadarView; public class MainActivity extends Activity { private RadarView mRadarView; @Override protect

    炫舞吧 android 游戏开发

    import android.view.WindowManager; import android.view.SurfaceHolder.Callback; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; import android.widget....

    星座说明书

     Android的每一个可视化界面,都有其唯一的布局配置文件,该文件里面有各种布局方式,各种资源文件如图像,文字,颜色的引用,程序在运行时,可以通过代码对配置文件进行读取。这样就可以形成不同的可视化界面和...

    在线播音乐含背景掉音乐符活波界面

    用windowmanager制作的音乐播放器,含掉音乐符的金典动态界面,播放器可一段时间后进行隐藏,碰触界面可再次激活播放器出现。

    Android开发中获取View视图宽与高的常用方法小结

    本文实例讲述了Android开发中获取View视图宽与高的常用方法。分享给大家供大家参考,具体如下: 一、根据WindowManager管理器获得 1)这两种方法在屏幕未显示的时候,还是处于0的状态,即要在setContentView调用之后...

    Android悬浮窗的实现(易错点)

    0. 前言  现在很多应用都使用到悬浮窗,例如微信在视频的时候,点击Home键,...那么,既然要实现一个能够在自身应用以外的界面上的悬浮窗,我们就要利用WindowManager来“做手脚”。 (frameworks/base/core/java/and

Global site tag (gtag.js) - Google Analytics