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



原来,整个Android的窗体机制是基于一个叫做 WindowManager,这个接口能够加入view到屏幕,也能够从屏幕删除view。它面向的对象一端是屏幕,还有一端就是View,直接忽略我们曾经的Activity或者Dialog之类的东东。事实上我们的Activity或者Diolog底层的实现也是通过WindowManager。这个
WindowManager是全局的。整个系统就是这个唯一的东东。

它是显示View的最底层了。 



写一个简单的代码:

  1. WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
  2. Button view = new Button(this);
  3. view.setText("window manager test!");
  4. WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
  5. mWm.addView(view, mParams);
  1. //改变Dialog背景透明度
  2. Dialog dg = new Dialog(this);
  3. Window window = dg.getWindow();
  4. WindowManager.LayoutParams lp = window.getAttributes();
  5. .5f;
  6. window.setAttributes(lp);
  7. //lp.alpha = 0.5f 透明度设置 其值要合理 自己重复測试
  8. //为什么要这个技巧 由于非常多人说:弹出Dialog会导致背景变暗 有Animation发生 导致性能变慢 能够用这个改变之 并且能够借助这个 使得全透明 不挡住Dialog后面内容的显示

一般在刚開始开发android时。会犯一个错误。即在View的构造函数中获取getWidth()和getHeight(),当一个view对象创建时,android并不知道其大小,所以getWidth()和getHeight()返回的结果是0,真正大小是在计算布局时才会计算,所以会发现一个有趣的事,即在onDraw(
) 却能取得长宽的原因。

  1. width = activity.getWindowManager().getDefaultDisplay().getWidth();
  2. height = activity.getWindowManager().getDefaultDisplay().getHeight();

Android----------WindowManager的更多相关文章

  1. Android WindowManager悬浮窗:不需要申请权限实现悬浮

     Android WindowManager悬浮窗:不需要申请权限实现悬浮 附录文章1介绍了Android平台上的悬浮窗WindowManager,WindowManager悬浮窗可以悬浮在And ...

  2. 关于Android WindowManager显示悬浮窗的动画效果

    要实现WindowManager添加的窗口,实现动画显示,就需要添加如下红色的属性,其他的添加View只要设置其Animations属性也会实现动画,当然自己实现也可,但是能直接用系统的已经实现好的, ...

  3. Android WindowManager 监听返回键及home键

    一.监听home键盘,Android Home键系统负责监听,捕获后系统自动处理.有时候,我们需要监听home键处理自己的逻辑,监听方法如下: /** * 监听home键广播 */ private f ...

  4. Android WindowManager的使用

    经常,我们看到在桌面上可移动的悬浮窗,这种场景还是很多的, 像流量统计,桌面歌词等,安全软件的清理小部件 这种小部件主要是通过 WindowManager ; WindowManager.Layout ...

  5. Android WindowManager 小结

    Android---系统服务之 ---WindowManager WindowManager是Android中一个重要的服务(Service ).WindowManager Service 是全局的, ...

  6. Android WindowManager实现悬浮窗效果 (一)——与当前Activity绑定

    最近有学生做毕业设计,想使用悬浮窗这种效果,其实很简单,我们可以通过系统服务WindowManager来实现此功能,本章我们来试验一下在当前Activity之上创建一个悬浮的view. 第一步:认识W ...

  7. Android WindowManager和WindowManager.LayoutParams的使用以及实现悬浮窗口的方法

    1.理清概念 我们使用过Dialog和PopupWindow,还有Toast,它们都显示在Activity之上.那么我们首先需要理解的是android中是如何去绘制这些UI的呢?这里我只讲我所理解的, ...

  8. Android添加系统级顶层窗口 和 WindowManager添加view的动画问题

    当Dialog有编辑框时如果选择会弹菜单窗口就不要用 Context applicationContext = mainActivity.getApplicationContext(); AlertD ...

  9. android 不能在子线程中更新ui的讨论和分析

    问题描写叙述 做过android开发基本都遇见过 ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是仅仅能在主线程中更改 ui.子线程要 ...

  10. Android 悬浮窗权限各机型各系统适配大全

    这篇博客主要介绍的是 Android 主流各种机型和各种版本的悬浮窗权限适配,但是由于碎片化的问题,所以在适配方面也无法做到完全的主流机型适配,这个需要大家的一起努力,这个博客的名字永远都是一个将来时 ...

随机推荐

  1. Troubleshooting:lvm调整分区时“Error parsing metadata for VG fedora”的解决

    磁盘满了,由于使用的是lvm,想要扩容时发现无论lvs还是lvdisplay这类命令都会报同样的错: [root@localhost qwang]# lvs Parse error at (line ...

  2. WPF 自带Datagrid编辑后无法更新数据源的问题

    原文  WPF 自带Datagrid编辑后无法更新数据源的问题 解决办法: 在列的绑定属性里加上UpdateSourceTrigger,示例XAML如下 <DataGrid Grid.Row=& ...

  3. anglehack参赛总结

    自已不足的方面: 自已和伙伴是带着idea去的,但是没有带有很大的热情激励和吸引在场的hacker加入团队,一定要找最优秀的人加入团队,事实上我是有这方面识人认人的能力的,24h,5-6个人的优秀团队 ...

  4. linux卸载不完全

    kali安装一个Nessus,但是在加载插件时候断网了,插件没下载完,后面打开也无法下载插件于是果断卸载了重装,但是无法删除配置文件,恼火了一天 完全卸载软件命令 sudo apt-get --pur ...

  5. CentOS6.4 安装 Oracle11g

    1.硬件要求检查: 1.1 内存要求: 内存大于1G(使用虚拟机安装时内存要稍微大一些,否则安装检查不通过) #cat /proc/meminfo //查看内存大小 1.2 交换分区要求: 交换分区是 ...

  6. checkbox之checked的方法(attr和prop)区别

    1. $('#checkbox').click(function(){ if($('#checkbox').is(':checked')) { $(".sendmailhui"). ...

  7. 使用gradle打包jar包

    近期用android studio来做android开发的IDE,它是使用gradle来构建的,于是開始学习gradle. 如今有一个项目,里面有一个android-library的模块.我想在做re ...

  8. POJ 2115 C Looooops(扩展欧几里得应用)

    题目地址:POJ 2115 水题. . 公式非常好推.最直接的公式就是a+n*c==b+m*2^k.然后能够变形为模线性方程的样子,就是 n*c+m*2^k==b-a.即求n*c==(b-a)mod( ...

  9. 一个能够自己主动生成静态库,自己主动安装程序的Makefile

    .PHONY:clean install CC=g++ CFLAGS=-Wall -g BIN=libecho.a INCLUDE=echo SRC=src OBJS=Socket.o Rio.o T ...

  10. git使用说明

    1,git clone git://github.com/schacon/simplegit.git git工作目录,暂存目录,本地代码仓库都有代码了. 2,git pull git://github ...