Android屏幕方向的一些问题

我们要设置屏幕的方向,当然先需要判断屏幕的方向,下面提供两种方法:

1,  DisplayMetrics dm = new DisplayMetrics();  //显示的度量

getWindowManager().getDefaultDisplay().getMetrics(dm);  //必须调用,window才会赋值给dm

(或者DisplayMetrics dm = getResources().getDisplayMetrics())

int width = dm.widthPixels;

int height = dm.heightPixels;

然后根据宽高的大小比,判断是竖屏(portrait)还是横屏(landscape)。

2,if(getResources().getConfiguration().orientation==Configuration.ORIENTATION_PORTRAIT)

是否为竖屏,或者也可以判断是否为横屏。

ok,现在知道当前屏幕是什么方向(当然不知道好像也没什么关系,霸王硬上弓),那么就可以做出需求设置:

1,在代码中:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);  设置为横屏

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  设置为竖屏

2,在项目的AndroidManifest.xml中的Activity上设置Android:screenOrientation的属性:

“unspecified”:默认值,不特别指定,由系统来判断显示方向;

“landscape”:横屏显示(宽比高要长),竖屏向左或右旋转90度;userLanscape,只竖屏旋转90度;

“portrait”:竖屏显示(高比宽要长) ,userPortrait跟它效果一样就是竖屏而已;

“user”:用户当前首选的方向;

“behind”:和该Activity下面的那个Activity的方向一致(在Activity堆栈中的) ;

“sensor”:有物理的感应器来决定,一般设置的自动旋转应该就是根据物理的感应器来相应的;

“nosensor”:忽略物理感应器,这样就不会随着用户旋转设备而更改了(”unspecified”设置除外);

如果我们不设置屏幕的方向,那么默认的方向就会随着系统的改变而改变,在此时回顾一下相关的Activity的生命周期:

竖屏(portrait)转横屏(landscape)或者是横屏转竖屏,Activity生命周期都只走一次(并没有横屏转竖屏走两次的说法)。

当然也可以通过在AndroidManifest.xml中的Activity上设置android:configChanges的属性来控制生命周期:

“mcc“:移动国家号码,由三位数字组成,每个国家都有自己独立的MCC,可以识别手机用户所属国家。

“mnc“:移动网号,在一个国家或者地区中,用于区分手机用户的服务商。

“locale“:用户所在地区发生变化。

“touchscreen“:触摸的屏幕发生变化(这个应该不容易发生)

“keyboard“:键盘模式发生变化,例如:用户接入外部键盘输入。

“keyboardHidden“:用户打开手机硬件键盘

“navigation“:导航栏类型发生变化(应该指硬件的导航按钮功能发生变化)

“orientation“:设备旋转,横向显示和竖向显示模式切换。

“fontScale“:全局字体大小缩放发生改变

几种常用的情况:

1,android:configChanges=”orientation”,activity的生命周期无论值竖屏切横屏还是横屏切竖屏都是走一遍生命周期,不会调用onConfigurationChanged的方法;

2,android:configChanges=”screenSize”,结果同上;

3,android:configChanges=”orientation|screenSize”,Activity在切换横竖屏时不走生命周期,只会在切换的时候调用onConfigurationChanged的方法。

以上测试环境:小米2(android5.0系统),与部分参考结果不同,欢迎测试。

参考:

1,http://www.cnblogs.com/charley_yang/archive/2011/04/17/2018940.html

2,http://blog.csdn.net/u010980446/article/details/52653045

3,http://blog.csdn.net/dingxiaowei2013/article/details/24852239

    原文作者:前山饭店
    原文地址: https://www.jianshu.com/p/8c5e0a678f6f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞