用WindowManager直接显示View
来源:互联网 发布:ps手绘软件 编辑:程序博客网 时间:2024/06/13 22:10
本文章参照自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-5959.html
我们Android平台是一个又一个的Activity组成的,每一个Activity有一个或者多个View构成。所以说,当我们想显示一个界面的时候,我们首先想到的是建立一个Activity,然后所有的操作在Activity里面实现,或者是一个Dialog或者Toast。这种方式固然简单,但是在有些情况下,我们要求的只是简单的显示,用Activity显然是多余,这个时候,我们如何处理呢?
原来,整个Android的窗口机制是基于一个叫做WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。
写一个简单的代码:
示例1:
WindowManager wm=null;
View rootView;
public void showWindow()
{
if(wm==null)
wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
if(rootView==null)
{
Button btn = new Button(this);
btn.setText("window manager test!");
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
Toast.makeText(MainActivity.this, "How are you? No is:"+System.currentTimeMillis()%100, 2000).show();
}
};
btn.setOnClickListener(listener);
rootView=btn;
}
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.width=400;
params.height=100;
/*@1params.flags |=(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
|WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); */
//@2params.flags|=WindowManager.LayoutParams.FLAG_SPLIT_TOUCH;
wm.addView(rootView, params);
}
public void romoveWindow()
{
if(rootView!=null)
wm.removeView(rootView);
}
我们这个button的显示和当前的运行环境基本上是无关的,当前是什么activity或者是桌面,使用WindowManager可以给你的编程带来很大的灵活性,但是要注意,显示出来就要销毁掉,这个是必须的,销毁其实就是一个remove。
注意:默认的话,view显示在最上层,但是后面的view无法获得焦点,当你touch的坐标超出你的view的范围时,它还是把touch事件发送到它。在Android SDK3.0之前的话,没有很好的处理方式。只有采用@1处的代码,让你的view不能获得焦点,不能处理触摸屏事件,不能接收按键事件及其他按钮事件,这样它后面的view才能获得焦点,才能接收触摸屏事件,按键事件及其他按钮事件。在Android SDK3.0之后,才支持slipt touch的处理。这时你可以采用@2处的代码。
关于WindowManager.LayoutParams的更多内容请参考《WindowManager.LayoutParams》
- 用WindowManager直接显示View
- 用WindowManager直接显示View
- android使用WindowManager显示自定义View
- 102.使用WindowManager在窗口上显示view
- 关于WindowManager.addView() 不显示添加的View的问题!
- android.view.WindowManager$BadTokenException
- WindowManager.LayoutParams//android.view
- android.view.WindowManager API
- view/WindowManager.LayoutParams 下
- android.view.WindowManager$BadTokenException
- WindowManager操作View示例
- android.view.WindowManager$BadTokenException
- WindowManager添加View
- WindowManager: android.view.WindowLeaked:
- android.view.WindowManager$BadTokenException
- WindowManager: android.view.WindowLeaked
- Android在onCreate方法中调用显示Popupwindow报错 android.view.WindowManager$BadTokenException
- 103.使用WindowManager在窗口上显示view的优化界面
- 关于 Java Collections API 您不知道的 5 件事,第 1 部分
- #ifdef __cplusplus 是什么意思?
- ubuntu字符乱码问题
- [Web-Harvest数据采集之一]WebHarvest基础-配置文件分析
- javase格式化数字实例总结
- 用WindowManager直接显示View
- \lib\klist.c
- Win7安装英文语言包(图文)
- lookupfile 在新标签中打开文件
- socket --------tcp/ip
- vim自动补全‘(’。。。
- Silverlight4里面嵌入html页面或者asp.net(jsp)控件实现
- 评教系统背景分析
- Android网络加载时显示进度条