一、概述
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"
原創文章,作者:MCUXT,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/361727.html