View not attached to window manager

本文介绍了解决Android应用中出现的View not attached to window manager异常的方法。主要探讨了两种情况:一是从系统相机返回时发生的异常;二是屏幕方向改变导致的异常。针对这两种情况提供了限制屏幕翻转和控制特定视图重画的具体解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java.lang.IllegalArgumentException: View not attached to window manager

解决方法:

在调用系统相机拍照相片后返回protected void onActivityResult(int requestCode, int resultCode, Intent data)方法,那么可能会抛出这个异常,原因就是返回activity后,重新运行onCreate方法,那些view重新画出来,某些需要初始化的变量没有设置好。处理这个问题,只要有两种方法:(关键第二点)
1. 限制屏幕翻转
可在AndroidManifest.xml中设定android:screenOrientation=”portrait”
2. 如果是需要翻转的,那么限制那些view做重画动作。
可在AndroidManifest.xml中设定android:configChanges=”orientation|keyboardHidden|navigation”



在Dialog转圈圈的过程中,如果手机屏幕方向改变,那么可能会抛出这个异常,原因就是屏幕翻转后那些view重新画出来,dialog在执行dismiss()的时候,
找不到原来的位置了。那么要处理这个问题,最简单的几种方法是:
1. 限制屏幕翻转
可在AndroidManifest.xml中设定android:screenOrientation=”portrait”
2. 如果是需要翻转的,那么限制那些view做重画动作。
可在AndroidManifest.xml中设定android:configChanges=”orientation|keyboardHidden|navigation”
3.  如果你又要翻转,又要重画view,那你就用代码去控制

[java]  view plain copy print ?
  1. private void lockScreen(){  
  2.         Configuration newConfig = getResources().getConfiguration();  
  3.         if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){  
  4.         //横屏  
  5.             U.dout("ORIENTATION_LANDSCAPE lock it!");  
  6.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  
  7.         }else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){  
  8.         //竖屏  
  9.             U.dout("SCREEN_ORIENTATION_PORTRAIT lock it!");  
  10.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
  11.         }  
  12.         else if(newConfig.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_NO){  
  13.         //键盘没关闭。屏幕方向为横屏  
  14.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  
  15.         }else if(newConfig.hardKeyboardHidden == Configuration.KEYBOARDHIDDEN_YES){  
  16.         //键盘关闭。屏幕方向为竖屏  
  17.             setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  
  18.         }  
  19.     }  
  20.   
  21.     private void unlockScreen(){  
  22.         U.dout("unlock!");  
  23.         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);  
  24.     }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值