[英]Force an Android activity to always use landscape mode
查看第 9 行的 AndroidManifest.xml( 鏈接):
<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">
這一行將screenOrientation
指定為橫向,但作者進一步使用configChanges="orientation|keyboardHidden"
覆蓋任何屏幕方向更改。 這指向 VncCanvasActivity.java 中的重寫函數。
如果您查看 VncCanvasActivity,第 109 行是被覆蓋的函數:
@Override
public void onConfigurationChanged(Configuration newConfig) {
// ignore orientation/keyboard change
super.onConfigurationChanged(newConfig);
}
作者專門發表評論以忽略任何鍵盤或方向更改。
如果你想改變這一點,你可以回到上面顯示的 AndroidManifest.xml 文件,並將該行更改為:
<activity android:screenOrientation="sensor" android:name="VncCanvasActivity">
當用戶旋轉設備時,這應該會改變程序從縱向切換到橫向。
這可能有效,但可能會弄亂 GUI 的外觀,具體取決於布局的創建方式。 你將不得不考慮到這一點。 此外,根據活動的編碼方式,您可能會注意到,當屏幕方向改變時,填充到任何輸入框中的值都會消失。 這也可能需要處理。
您也可以在 Java 代碼中設置相同的數據。
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
ActivityInfo 上的其他值將讓您將其設置回傳感器驅動或鎖定肖像。 就我個人而言,我喜歡按照此問題的另一個答案中的建議將其設置為 Manifest 中的某些內容,然后在需要時使用 Android SDK 中的上述調用進行更改。
在我的OnCreate(Bundle)
,我通常執行以下操作:
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
您可以在清單中指定活動的方向。 見這里。
<activity android:allowTaskReparenting=["true" | "false"]
...
android:screenOrientation=["unspecified" | "user" | "behind" |
"landscape" | "portrait" |
"sensor" | "nosensor"]
...
"adjustResize", "adjustPan"] >
在清單中:
<activity android:name=".YourActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|screenSize">
在您的活動中:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);
以下是我用來以橫向模式顯示所有活動的代碼:
<activity android:screenOrientation="landscape"
android:configChanges="orientation|keyboardHidden"
android:name="abcActivty"/>
一個快速而簡單的解決方案是針對 AndroidManifest.xml 文件,為您希望強制為橫向模式的每個活動添加以下內容:
android:screenOrientation="landscape"
這適用於 Xamarin.Android。 在 OnCreate()
RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
就是這樣!! 等這個修復好久了。
我有一個關於雙重啟動需要(以編程方式)橫向模式的活動的舊 Android 問題: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
現在Android在啟動時制作橫向模式。
Arslan,你為什么要以<activity android:name=".youractivityName" android:screenOrientation="portrait" />
方式強制定向,盡管清單中已經有一種方法<activity android:name=".youractivityName" android:screenOrientation="portrait" />
您需要輸入每個活動
景觀用
android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"
肖像畫
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="org.thcb.app">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".MainActivity2"
android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
在代碼中這樣做是 IMO 錯誤的,如果您將其放入 onCreate,則更是如此。 在清單中執行此操作,“系統”從應用程序啟動時就知道方向。 這種類型的元或頂級“指導”應該在清單中。 如果您想向自己證明這一點,請在 Activity 的 onCreate 中設置一個中斷。 如果您在代碼中執行此操作,它將被調用兩次:它以縱向模式啟動,然后切換到橫向。 如果您在清單中執行此操作,則不會發生這種情況。
對於Android 4.0 (Ice Cream Sandwich) 及更高版本,除了landscape
值之外,我還需要添加這些。
android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
按下電源按鈕時,僅使用keyboardHidden|orientation
仍會導致內存泄漏和重新創建我的活動。
在像這樣調用 setLayout 方法之前,在 onCreate 方法中使用 ActivityInfo (android.content.pm.ActivityInfo)
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
僅使用
android:screenOrientation="portrait" 工具:ignore="LockedOrientationActivity"
按CTRL+F11
旋轉屏幕。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.