一、概述
Android开发中,我们可以通过android:screenOrientation属性来控制屏幕的方向。该属性用于在manifest文件的activity标签中指定当前Activity的屏幕方向。其值有四种类型:
portrait:竖屏显示,不会随着设备的方向变化而变化,即始终保持竖屏模式。
landscape:横屏显示,同样不会随着设备的方向变化而变化,即始终保持横屏模式。
sensorPortrait:竖屏显示,可根据设备方向变化而变化,即支持正竖屏和反竖屏两个方向。
sensorLandscape:横屏显示,可根据设备方向变化而变化,即支持正横屏和反横屏两个方向。
需要注意的是,如果在某些特殊情况下需要禁用当前activity屏幕的旋转功能,可以使用以下属性值:
userPortrait:与"portrait"相同,但允许用户旋转屏幕,如果用户旋转了屏幕,则会在用户旋转后自动切换回"portrait"。
userLandscape:与"landscape"相同,但允许用户旋转屏幕,如果用户旋转了屏幕,则会在用户旋转后自动切换回"landscape"。
behind:与在进行屏幕旋转时,此Activity处于背景。
Sensor:根据设备的方向变化而变化,*/
二、portrait和landscape的使用
原生的Android系统并不会在横屏/竖屏模式间进行切换,但这一分界点相对应的触发条件则由各设备厂家定制,也就是说不同的手机品牌会有不同的横竖屏界定条件,同样,不同的应用也可能会定制各自的界定条件。
这里以设置竖屏为例:
//AndroidManifest.xml配置
<activity android:name=".MyActivity"
android:configChanges="screenSize|keyboardHidden"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在这种竖屏的模式下,无论用户怎么旋转设备,MyActivity都会保持竖屏模式。
三、sensorPortrait和sensorLandscape的使用
Sensor结果有8种,如下:
// Portrait
sensorPortrait = 0;
// Landscape
sensorLandscape = 6;
// Reverse Portrait
reversePortrait = 2;
// Reverse Landscape
reverseLandscape = 8;
很多应用可能更喜欢支持正横屏和正竖屏。下面以在AndroidManifest.xml文件中配置横竖屏旋转示例为例,演示如何使用这些值:
<activity android:name=".MyActivity"
android:configChanges="screenSize|keyboardHidden"
android:screenOrientation="sensor">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这里我们设置了android:screenOrientation="sensor",这将允许用户在设备的任何方向上旋转屏幕。在这种情况下,如果您的应用程序支持横屏和竖屏模式,则必须使用其onConfigurationChanged()方法重新绘制其界面以适应更改的方向。
四、禁用屏幕的旋转
如果你的应用不支持多种方向的屏幕旋转,那么你可以在AndroidManifest.xml文件的activity标签里设置以下值来禁用屏幕旋转:
android:screenOrientation="portrait"
或者
android:screenOrientation="landscape"
如果你想禁用图像的旋转并希望相应的数据在极少数的情况下其接收方知道,则可以使用以下方法:
// 在设置横屏和竖屏模式之后添加以下代码
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); //禁止横屏和竖屏之间的旋转
getWindow().getDecorView().setKeepScreenOn(true); //禁止屏幕旋转并保持屏幕亮度不变
五、代码示例
//设置横屏
android:screenOrientation="landscape"
//设置竖屏
android:screenOrientation="Portrait"
//可以根据设备方向变化,支持正竖屏和反竖屏两个方向
android:screenOrientation="sensorPortrait"
//可以根据设备方向变化,支持正横屏和反横屏两个方向
android:screenOrientation="sensorLandscape"