小米手机无法使用phonewindowmanagerr的addView,怎么解决

6624人阅读
Android(530)
起源:某个程序,主界面是一个surfaceView,本来想做一个类似于封面的东西,在程序启动以后马上加载,,发现直接在布局里面直接addView,覆盖不了SurfaceView,于是想用WindowManager去实现。
于是写了这样一段代码:
然后在onCreate中调用这个方法。
之后问题出现了...
程序启动后,没有响应...
在尝试修改各种参数未果以后,我抱着一试的希望吧addCover从onCreate搬到某个Click事件中执行,结果就正常了。
结果是,不能在onCreate中往WindowManager里面addView?或者是我用的这个设备,它的framework兼容性有问题?
最后,我选择了在onCreate里面Handler.sendEmptyMessage()的方式解决了问题。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1750887次
积分:20534
积分:20534
排名:第250名
原创:142篇
转载:997篇
评论:236条
(6)(9)(7)(13)(10)(27)(6)(15)(15)(57)(41)(7)(5)(6)(12)(21)(47)(32)(1)(28)(1)(23)(49)(35)(25)(60)(99)(36)(108)(45)(30)(7)(15)(1)(18)(62)(3)(53)(1)(8)(9)(9)(9)(22)(7)(15)(1)(11)(3)(9)android 开发中遇到错误及解决办法总结
新手总结的开发中所遇到错误及解决办法,如有不对,欢迎指正,如有更好的解决办法,也请不吝赐教。
一、dialog.show()引起的android.view.WindowManager$BadTokenException错误
android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@427b7270 is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:653)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:326)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
at android.view.Window$LocalWindowManager.addView(Window.java:558)
at android.app.Dialog.show(Dialog.java:316)
错误原因是Dialog在show的时候必须要有一个activity作为窗口载体,上面的日志的意思是承载Dialog的activity已经被销毁了,不存在了
1、在show之前加判断activity是否被销毁了
if(!isFinishing()){
dialog.show();
2、直接try catch(不推荐)
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
先说说上下文的使用
对话框它是我们的Activity的一部分,对话框它挂载在我们的Activity上;
getApplicationContext()这个方法得到的是Context
Activity.this 得到Context的一个子类
也就是说 Activity.this 相当于是getApplicationContext()的子类
父类有的子类一定有 - 没有 token
子类有的父类不一定有 --有 token
this 还有Activity.this和我们的getApplicationContext();
大多数情况推荐:Activity.this
上下文大多数情况推荐:Activity.this
二、dialog.dismiss()引起的java.lang.IllegalArgumentException错误
java.lang.IllegalArgumentException: View not attached to window manager
at android.view.WindowManagerGlobal.findViewLocked(WindowManagerGlobal.java:383)
at android.view.WindowManagerGlobal.removeView(WindowManagerGlobal.java:285)
at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:104)
at android.app.Dialog.dismissDialog(Dialog.java:332)
at android.app.Dialog.dismiss(Dialog.java:315)
这个错误测试是测不出来的,我是加了第三方的错误统计才得以发现的,原因是由于某种原因导致Activity被杀死后又重新创建
常发生这类Exception的情形都是,有一个费时的线程操作,需要在显示一个ProgressDialog,在任务开始的时候显示一个对话框,然后当任务完成了再Dismiss对话框,如果在此期间如果Activity因为某种原因被杀掉且又重新启动了,那么当Dismiss的时候WindowManager检查发现Dialog所属的Activity已经不存在了,所以会报IllegalArgumentException: View not attached to window manager.
从网上找了好些解决方案都不是太理想,然后就尝试着自己解决, 我是这么解决的,反正加上之后这个错误就没有再出现过,如有不对还请赐教。
重写Activity的onDestroy,将dialog置为空。
public void onDestroy() {
super.onDestroy();
三、读取通讯录时,用户选择拒绝,未能获取权限导致的java.lang.SecurityException: Permission Denial错误
java.lang.SecurityException: Permission Denial: reading com.android.providers.contacts.ContactsProvider2 uri content://com.android.contacts/data/phones from pid=27697, uid=10194 requires android.permission.READ_CONTACTS, or grantUriPermission()
at android.os.Parcel.readException(Parcel.java:1465)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:185)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:137)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:413)
at android.content.ContentResolver.query(ContentResolver.java:470)
at android.content.ContentResolver.query(ContentResolver.java:413)
读取通讯录时,用户选择拒绝,未能获取权限
直接try catch 如果捕获到异常,提示用户未授于权限。
四、拨打电话时,手机没有相关应用程序导致的android.content.ActivityNotFoundException错误,用打开网页链接时,若没有安装浏览器,也会产生类似的错误,解决办法一样
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.DIAL dat=tel:xxxxxxxxxxxx }
at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1632)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1424)
at android.app.Activity.startActivityForResult(Activity.java:3438)
at android.app.Activity.startActivityForResult(Activity.java:3399)
因为手机没有安装可以拨打电话的应用程序
直接try catch 如果捕获到异常,提示用户没有相关的应用程序处理此操作
五、在子线程,更新UI
android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:5281)
at android.view.ViewRootImpl.requestLayout(ViewRootImpl.java:943)
at android.view.View.requestLayout(View.java:15614)
at android.view.View.requestLayout(View.java:15614)
在子线程显示一个Toast,更新UI只能在主线程中进行
1、使用Looper
Looper.prepare();
Toast.makeText(aActivity.this,"test",Toast.LENGTH_SHORT).show();
Looper.loop();
2、使用Handler
在类中定义
private final Handler msgHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.arg1) {
case R.string.msg_not_network:
Toast.makeText(getApplicationContext(), getResources().getString(R.string.msg_not_network), Toast.LENGTH_SHORT).show();
在子线程中,发送消息
Message msg = msgHandler.obtainMessage();
msg.arg1 = R.string.msg_not_
msgHandler.sendMessage(msg);
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'Add subView 后subView不显示也不出错,求解
我用navigationController从一个view跳到另外一个view
navigationController代码:
C/C++ code
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
_detailController = [[WBDetailContentController alloc]init];
[self.navigationController pushViewController:_detailController animated:YES];
[_detailController release];
跳转之后的viewDidLoad函数代码:
C/C++ code
- (void)viewDidLoad
[super viewDidLoad];
self.title = @&test&;
UIView *v = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]]autorelease];
UIView *v2 = [[[UIView alloc]initWithFrame:CGRectMake(1, 1, 10, 10)]autorelease];
self.view =
self.view.autoresizesSubviews = YES;
[v release];
_buttonForword = [[UIButton alloc]initWithFrame:CGRectMake(40, 150, 20, 10)];
_buttonComment = [[UIButton alloc]initWithFrame:CGRectMake(70, 150, 20, 10)];
_buttonMore = [[UIButton alloc]initWithFrame:CGRectMake(100, 150, 20, 10)];
_buttonMore.titleLabel.text = @&More&;
_buttonComment.titleLabel.text = @&Comment&;
_buttonForword.titleLabel.text = @&Forword&;
[self.navigationController.view addSubview:_buttonForword];
[self.view addSubview:_buttonComment];
[self.view addSubview:_buttonForword];
[self.view addSubview:_buttonMore];
[_buttonForword release];
[_buttonComment release];
[_buttonMore release];
跳转之后没一个按钮出现。求解!
谢谢!!!
------解决方案--------------------
self.view =
改为[self.view addSubview:v];
其他按钮加到v上
[v addSubview: _buttonComment];
另外下面这句没用,同一个按钮不能同时加入两个view中
[self.navigationController.view addSubview:_buttonForword];
------解决方案--------------------
显示出来了,只是你看不到而已。
&_buttonMore.titleLabel.text = @&More&;
这种写法是不对的。&
UIButton 设置图片和标题是要跟状态对应的,看看文档就知道了。
把按钮的背景图换一下就显示出来了……
Iphone开发(九)理解subView,手动实现多个视图切换
holydancer原创,如需转载,请在显要位置注明: 转自holydancer的CSDN专栏,原文地址:http://blog.csdn.net/holydancer/article/details/7422365
在Iphone的视图中,其实就是一个一个view,一层view上面放一层view,一个view上面放
mysqldump add-drop-database导致恢复失败原因和处理
通常用mysqldump+source做数据备份和恢复。如果想要完全恢复备份时的状态,要删掉新表,一般思路就是让mysqldump生成drop database + create database.
bin/mysqldu
FragmentManager在Activity重建后,add的fragment消失,救命 被这个问题折磨了三天了,始终找不到原因要哭了T^T,求救求救
问题是这样的,我想学习制作微信那样的底部导航,用了四个Fragment和自定义控件的方法。为了防止在屏幕旋转时fragment跟着activity销毁,我在fragment的onCreate中增加了setRetainInstanc
Add 方法(Dictionary) 向 Dictionary 对象添加键和项目对。 object.Add key, item 参数 object 必选项。应为 Dictionary 对象的名称。 key 必选项。与添加的 item 相关的 key。 item 必选项。与添加的 key 相关的 item。 说明 如果 key 已经存在,则会出现错误。 下面例子举例说明如何使用 Add 方法: Di
add() 将元素添加到匹配元素的集合中。这是jquery参考手册上的表述。但其提供的例子链接错误,因此没有对add()的实例说明。这里就提供几个例子,以便更好的掌握add()的用法。 例一
&!DOCTYPE html& &html& &head& &style& div { width:60 height:60 m
ScriptCode
SetobjExcel=CreateObject(&Excel.Application&)
objExcel.Visible=True objExcel.Workbooks.Add objExcel.Cells(1,&nbs
Android中list.add问题 下面的代码一直运行好好的,却突然出问题了。listAll.add本应该加进去每个map2,但是输出却变成加入了相同的map2。之前一直运行好好的,这是怎么回事啊?
listAll.clear(); for(inti=0;i&str.length/&nbs
ScriptCode
SetobjExcel=CreateObject(&Excel.Application&)
objExcel.Visible=True objExcel.Workbooks.Add objExcel.Cells(1,&nbs
ADD_MONTHS() 如果第二个参数是小数会怎么样?
我们经常使用ADD_MONTHS()函数来获取一个日期的几个月之后的日期,例如,我们希望得到两个月之后的日期(日):
ChenZw&alter session set nls_date_format = 'yyyy-mm-dd';
会话已更改。
LinkedBlockingQueue的put,add和offer的区别
最近在学习&&Java并发编程实践&&,有很多java.util.concurrent包下的新类。LinkedBlockingQueue就是其中之一,顾名思义这是一个阻塞的线程安全的队列,底层应该采用链表实现。
[Android]Fragment加载替换add,show,hide,replace方法
本文主要探讨Fragment切换的细节问题。Demo连接已给出。
关于Fragment的基础知识可以移步: /guide/components/fragments.html
针对在一个Activity中的某个Layout中切换Fragment
;INC(Increment): 加一 ;DEC(Decrement): 减一 ;NEG(Negate): 求补(求反) ;ADD(Add): 加 ;ADC(Add Carry): 带进位加 ;SUB(Subtract): 减 ;SBB(Subtract With Borrow): 带进位减 ;CMP(Compare): 比较 ;INC、DEC、NEG 的指令格式: ;INC r/ADD、A
Add a Node to Oracle 12cR1 RAC on RHEL 6
The generic steps to follow when adding the new node to the cluster are:
Install Operating System Install required software Add/modify users and groups requi
子视图怎么在父视图中指定位置显示啊 如题,怎么让子视图在父视图的指定位置显示?我的子视图有父视图一半大小,但一加载的时候,都是覆盖父视图最上面的部分,怎么才能让它不在最上面显示啊,
------解决方案-------------------- 设置子view的frame属性
------解决方案-------------------- 除去设置subview的frame位置为父视图顶部外,在
Android Toast显示不出来 最近在做项目时,遇到一个问题,就是Toast弹不出来。Toast代码如下:
Toast.makeText(m.getApplicationContext(),msg,Toast.LENGTH_LONG).show();
这个问题只在华为3C手机上出现,在别的手机上都可以正常弹出显示。
debug跟代码时,在华为手机上发现这行代码也
当用jQuery要选择demo1标签时,会用到下面代码:jQuery('#demo1&);
当用jQuery选择demo1和demo2,不要告诉我用jQuery('div')。
这时就要用到标题中提到的方法,jQuery add方法:追加标签。
jQuery add使用方法:
jQuery('#demo1&).add('#demo2&);
如何实现:拖动图片到另一个图片上面 我在一个UIView里面加了两个subview(imageview),我想把其中一个图片拖动到另一个图片上面,现在的效果是拖动到另一个图片的时候就直接到他下面了,被覆盖了。怎么才能让被拖动的图片显示在固定图片的上面?
------解决方案--------------------
先计算被点击的视图在父视图中的坐标,然后在父视图中移动的时候修改点击视图的坐标
No compatible target were found. Do you wish to add a new Android Virtual Device Nocompatibletargetwerefound.DoyouwishtoaddanewA
Using the Value-add Scripts在CTP版本中,您只需简单地将一个ScriptManager控件加到页面中,默认的CTP核心功能(Atlas.js)就被添加了。不过其它一些脚本是可选的,例如AtlasUIGlitz.js文件。如果您要使用它们,则需要手动地将其加入ScriptManager的references中,或者将他们定义在XML-Script的&referece
DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)
这些函数执行日期运算。 date 是一个 DATETIME 或DATE值,用来指定起始时间。 expr 是一个表达式,用来指定从起始日期添加或减去的时间间隔值。 Expr是一个字符串;对于负值的时间间隔,它可以以一个 ‘-'开头。 type 为关键
为什么我的android sdk里面的add-ons文件夹为空? 为什么我的androidsdk里面的add-ons文件夹为空?
这个文件里面的东西很重要吗?
没有它可以开发安卓应用吗?
谢谢!!!
------解决方案-------------------- 不重要,那里是放googlemap的
------解决方案-------------------- 多虑了,官方下
IOS 在Storyboard下怎么手动来添加控件 如题,在storyboard下如何用代码手动添加控件,和在XIB下一样吗??
------解决方案-------------------- xib下不知道。storyboard下是subview.frame=XXX,view.addsubview(subview)
感觉应该一样。
求调教了~亲 刚学Objective-C,目前在写一个通讯录的app做实验。
我打算用SQLlite数据库,然后app有三个页面,首屏list,add页面,和show页面
list页面用于显示tableview,add用来添加条目进数据库,show页面用于展示cell
我该把sqllite定义在哪个文件里面呢?怎么做才能在add中添加进去,在list中显示
程序启动后左上角的title能不能不显示 在mainfest.xml中
有这样一段:
&application
android:allowBackup=&true&
fragment中使用viewPaper不显示数据内容 项目需要用到图片横向滑动的效果,但是在fragment中加入ViewPager后,使用继承自pagerAdapter的类为ViewPager提供数据,但是在执行过程中,发现instantiateItem根本没有被执行,但是在Activity中能够正常使用,求解这种问题是怎么造成的。以下是代码:
这个是ViewPagerAdapt
问题来源: /del/archive//1101970.html#1217514
Memo1 的 Lines 属性是一个 TStrings 对象, TStrings.Append 就是调用的 TStrings.Add, 所以它们没有区别;
请用 &Ctrl+鼠标左键& 看看源码, 如下图:
Hibernate 先get 一个实体数据,在修改数据,为新的数据,再add到数据库,需要注意什么?
1、今天在做一个很简单的save操作的是,定位我一个小时,特在此废话下,现在从数据库中通过接口get到数据,代码如下 // 获取当前流程数据
TaskRunData taskRunDataOriginal = this.task
——— android layout不显示布局绘图 显示空白
——— android layout不显示布局绘图 显示空白
1、点击 Help & Install New Software. 2、在 Add & Location 的输入区域里, 输入: https://dl-/android/eclipse
求解:服务意外终止
一个蓝牙连接服务。就是每过个10秒连接一次已经配对的蓝牙设备。如果连接成功就结束。
但是执行个几十次,就会出现这个问题。然后服务就终止了。
求大大解救。谢谢
12-.259:D/BluetoothCheckHandler(3019):setState()2-&1
ListView中不显示HeaderView ListView中加了头和尾后不显示HeaderView。当ListView高度为精确值时(dp)没问题。但当为match_parent和wrap_content时就只能看到尾了,看不到头(头成是空白了),请各位帮忙看一下。
activity_main.xml:
&LinearLayoutxmlns:android=&h
editText隐藏键盘后,再进入键盘不显示 editText使用代码隐藏后,再获得焦点键盘不显示了,是不是隐藏的代码有问题?
intflags=WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM; &
网上搜来的,看样子不错,记一笔。//------------------------------------ //heavilybasedontheQuirksmodeaddEventcontestwinner,JohnResig //addEvent functio
iPhone 应用里实现截屏功能的代码
UIView *view = [[[[[UIApplication sharedApplication] windows] objectAtIndex:1] subviews] lastObject];//获得某个window的某个subView NSInteger index = 0;//用来给保存的png
View 关闭问题 在一个tableview的选中事件中,我弹出了一个subView
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
myViewController *ViewController =[[myViewControl
快崩溃了,求助高手,安卓程序里onCreate运行完后,直接就跳出程序,界面也显示不出来 发现程序从欢迎界面activity跳到主activity后,直接就跳出来了,主activity的界面也显示不出来。断点调试和Log日志看到onCreate是能正常走完的,但是onCreate之后就莫名死了,如下图所示,没有报错信息,只有一条VMexitingwithresu
把与表达式匹配的元素添加到jQuery对象中。这个函数可以用于连接分别与两个表达式匹配的元素结果集。
Adds more elements, matched by the given expression, to the set of matched elements.
返回值 jQuery 参数 expr (String, DOMElement, Array&D
新建android项目时,出错了,求解
今天在新建android项目时报错,有木有打什么帮忙解决一下的,这个错误可以忽略吗?
------解决思路---------------------- 最后一句:jdk版本必须是1.5以上,现在的1.4。重选择一下jdk版本就行。
Activity被onDestroy后,再次打开该Activity时,imageSwitcher就显示不了图片了,求解~ 有A、B两个Activity,B中有imageSwitcher
A启动B,imageSwitcher正常显示图片幻灯,然后B关闭再打开A,此时我捕获到B的onDestroy执行了。
然后A再启动B,这是imageSwitcher就显示不了图片了,只显示白色背
DemonstrationscriptthatdisplaysformatteddatainaMicrosoftWorddocument.
SetobjWord=CreateObject(&Word.
Demonstrationscriptthatretrievesserviceinformationfroma computerandthendisplaysthatinformationintabularf小米手机无法使用WindowManager的addView,怎么解决_百度知道
小米手机无法使用WindowManager的addView,怎么解决
你好建议你拨打客服电话咨询或者上小米社区提问
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁1086人阅读
android日常笔记(46)
touch here
android在WindowManager添加View
作者:feiyangxiaomi
1. 事情的起因
项目的驱动,希望提供一个弹窗,这个弹窗的特点是:
- 非阻塞试弹窗,弹窗弹出的时候,点击弹窗外的屏幕区域,–不选PopupWindow(开源项目不能用)
- 弹窗需要内部能够点击某一项并做出相应,–不选
此时考虑在界面上加入一个View,通过WindowManager.addView方法去添加弹出图层,这里先贴出一个图,看一下这个效果是否是你的菜:
2. 为什么选择WindowManager.addView
WindowManager用来在应用与window之间的管理接口,管理窗口顺序,消息等。对于windowManager来说一个系统只有一个,它是由系统底层实现的,用于负责调度当前显示那个窗口,消息处理我们获得一个windowManager的方式如下:
WindowManager windowManager = (WindowManager)context().getSystemService(Context.WINDOW_SERVICE);
调用比较简单。
3.代码实现
把这个弹窗叫做PopupAction,后面统一为这个称呼。
显示PopupAction代码
* Show quick menu popup. Popup is automatically positioned, on top of anchor view. Calc of anchor and mRootView
* view for look out the poosition. Every side margin of 10dp and the arrow at the top of anchor.
* context the global information about an applicaion environment
* anchor view of call for
* actions action list items {@link #addActionItem(List)}
public void show(Context context, View anchor, List&ActionItem& actions) {
mContext =
if (mContext == null) {
Log.i("MenuDialog", "context is null");
int arrowP
int[] location = new int[2];
addActionItem(actions);
mShowAction = true;
anchor.getLocationOnScreen(location);
Rect anchorRect =
new Rect(location[0], location[1], location[0] + anchor.getWidth(), location[1] + anchor.getHeight());
int rootHeight = mRootView.getMeasuredHeight();
int rootWidth = mRootView.getMeasuredWidth();
xPos = anchorRect.centerX() - (rootWidth / 2);
if (xPos & 20) {
xPos = 20;
DisplayMetrics dm = mContext.getResources().getDisplayMetrics();
if ((dm.widthPixels - anchorRect.centerX()) & rootWidth / 2) {
xPos = dm.widthPixels - rootWidth - 20;
arrowPos = anchorRect.centerX() - xP
yPos = anchorRect.top - rootH
showArrow((R.id.arrow_down), arrowPos);
android.view.WindowManager.LayoutParams params =
(android.view.WindowManager.LayoutParams) mRootView.getLayoutParams();
params.x = xP
params.y = yP
mWM.addView(mParentView, params);
mParentView.addView(mRootView);
mParentView.setOnTouchListener(this);
Animation animationUp = AnimationUtils.loadAnimation(mContext, R.anim.grow_from_bottom);
mRootView.startAnimation(animationUp);
其中初始化View,添加菜单项和设置点击菜单项的点击回调,参考的代码,这里不再介绍。
4.本文的目标点
WindowManager和WindowManager.LayoutParams
添加的view不显示,引出WindowManager.LayoutParams用什么type?
属性WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,如何响应点击outside和back键盘?可以看下很有意思
属性WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY能不能用?
对于WindowManager.LayoutParams配置代码:
mParams = new WindowManager.LayoutParams();
mParams.height = LayoutParams.WRAP_CONTENT;
mParams.width = LayoutParams.WRAP_CONTENT;
mParams.format = PixelFormat.TRANSLUCENT;
mParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;
mParams.flags =
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
mParams.gravity = Gravity.TOP | Gravity.LEFT;
mRootView.setLayoutParams(mParams);
可以看到这里使用的type = WindowManager.LayoutParams.TYPE_APPLICATION_PANEL;,后面介绍一下几种类型。
- LayoutParams.FLAG_NOT_TOUCH_MODAL表示可以点击弹窗之外的屏幕区域,这是必须的。
- LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH表示可以监听外部点击事件,这时候可以dismiss掉当前的弹窗,也是必需的。
- WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE 表示当前弹窗捕获得焦点,但能点击,非常重要。不然键盘区域的所有touch事件都会收不到。
TYPE_ACCESSIBILITY_OVERLAY
窗口重叠仅由AccessibilityService截取用户交互,而不改变窗口的无障碍服务可以内省。
TYPE_APPLICATION
TYPE_APPLICATION_ATTACHED_DIALOG
和TYPE_APPLICATION_PANEL类似,但是不作为一个应用的一部分,显示在窗口的顶层
TYPE_APPLICATION_PANEL
应用顶层图层
TYPE_APPLICATION_MEDIA
播放器图层
TYPE_APPLICATION_STARTING
应用开始事的图层
TYPE_APPLICATION_SUB_PANEL
应用子面板
TYPE_PHONE
电话图层,部分手机无法使用,已测试
TYPE_SYSTEM_ALERT
系统通知,使用时发现该图层会独立在应用之上
TYPE_SYSTEM_DIALOG
系统对话框,使用时发现该图层会独立在应用之上
TYPE_SYSTEM_ERROR
系统错误,非常靠上
TYPE_SYSTEM_OVERLAY
系统普通图层
TYPE_TOAST
参考网上实例的时候,建议不要采用系统图层,网上的好多实例都是采用:TYPE_SYSTEM_ALERT,不合理。
WindowManager.addView的动画效果
动画部分可以采用:
WindowManager.windowAnimations=R.style.xxx但是不建议使用,该资源在官网上说是鼻息使用系统资源,因为window manager拿到应用的资源。
那怎么办?参考:
代码如下所示:
mParentView = new FrameLayout(mContext);
mWM.addView(mParentView, params);
mParentView.addView(mRootView);
Animation animationUp = AnimationUtils.loadAnimation(mContext, R.anim.grow_from_bottom);
mRootView.startAnimation(animationUp);
借助于ViewGroup(定义的mParentView),使用动画效果,小技巧很不错。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:260654次
积分:3380
积分:3380
排名:第6840名
原创:92篇
转载:14篇
评论:208条
(1)(22)(6)(1)(1)(3)(1)(3)(3)(1)(1)(1)(1)(1)(2)(5)(4)(24)(8)(7)(2)(5)(3)

我要回帖

更多关于 windowmanager 的文章

 

随机推荐