Android横竖屏切换问题

 

Android程序运行的时候,如果屏幕方向改变,默认情况下,是会重新执行OnCreate()方法的.这时候,可能会产生一些乱七八糟的问题.

一.一种情况是屏幕是竖屏的时候(假设),程序运行的时候貌似没问题,然后屏幕切换成横屏,此时,程序崩溃,报出如下异常.或者,手机刚开始是横屏,一运行程序就崩溃,也报出下列异常.

 

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xiaoniu.client/com.xiaoniu.client.XiaoNiuClient}: android.view.InflateException: Binary XML file line #2: Error inflating class <unknown>


网上有人说,可能是xml文件里面有一些编译器检查不出来的错误,但是,我的xml文件反复检查了几次,也没有问题.后来,检查了很久,终于得到另一种解释,那便是,你工程里面drawble文件夹里面的图片资源,适合你的手机竖屏的情况,便是,却不适合横屏的情况,比如,你的竖屏的时候,采用的是一种图片作为背景,但是,到了横屏的时候,这张图片却不能作为背景,因为高度,宽度悬殊太大,所以会报出以上异常.一种可能的方法便是,为了适合不同的横屏,竖屏显示效果,你可以在res目录下建立layout-land和layout-port目录,其中,drawble_land文件夹里面放的是适合你图片横屏显示的资源文件,则drawble_port,则是存放一些适合程序竖屏显示的同名文件.这次,当你的程序屏幕方向发生改变的时候,系统会自动去找到对应的drawble文件夹,然后采用里面的资源.这样,你的程序就能正常显示并运行了.

 

二.通过 this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏.通过WindowManager获得屏幕高度,宽度.

 

/ 屏幕方面切换时获得方向
  if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
   setTitle("landscape");
  }
  if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
   setTitle("portrait");
  }
  // 获得屏幕大小1
  WindowManager manager = getWindowManager();
  int width = manager.getDefaultDisplay().getWidth();
  int height = manager.getDefaultDisplay().getHeight();
  // 获得屏幕大小2
  DisplayMetrics dMetrics = new DisplayMetrics();
  getWindowManager().getDefaultDisplay().getMetrics(dMetrics);
  int screenWidth = dMetrics.widthPixels;
  int screenHeight = dMetrics.heightPixels;

 


三. 换屏时重新载入问题.默认情况下,切换屏幕的时候,会重新执行OnCreate().

如果不需要从新载入,也即在切换屏幕时,不重新执行OnCreate()方法,可以在mainfest配置文件里面,相应的Activity里面添加下面语句:

 android:configChanges="keyboardHidden|orientation"

 

注意,如果在androidf4.0以上系统,则应改为:

 android:configChanges="keyboardHidden|orientation|screenSize"  

 

另外一个问题,如果我们确实需要在横竖屏切换的时候,增加一些操作呢?可以这样做,当我们添加了以上的语句了,横竖屏切换的时候,不会触动OnCreate()方法,但是,它会自动执行

public void onConfigurationChanged(Configuration newConfig)

所以,可以在这个里面进行相应操作就可以了.

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值