Android – 禁用横向模式?

如何禁用我的Android应用程序中的一些视图的横向模式?

android:screenOrientation="portrait"到AndroidManifest.xml中的活动。 例如:

 <activity android:name=".SomeActivity" android:label="@string/app_name" android:screenOrientation="portrait" /> 

编辑:由于这已经成为一个超人气的答案,我觉得非常内疚,迫使肖像很less是它经常应用到的问题的正确的解决scheme。
强制肖像的主要注意事项:

  • 这并不免除您必须考虑活动生命周期事件或正确保存/恢复状态。 除了应用旋转之外还有很多可以触发活动销毁/娱乐的事情,包括像多任务一样的不可避免的事情。 没有捷径; 学习使用包和retainInstance片段。
  • 请记住,不像相当统一的iPhone体验,有许多设备的肖像不是明显stream行的方向。 当用户在使用硬件键盘或游戏手柄的设备上安装Droid 1-4,Xperia Play或Nvidia Shield时,强制肖像可能会使您的应用程序成为一个巨大的可用性障碍(特别是在屏蔽上)。 如果你的应用程序没有一个非常具体的使用案例,导致支持其他方向的直接负面经验,你应该不要强迫景观。 我正在谈论的事情,“这是一个远程控制应用程序的手机与红外线发射器只在一面的设备,”或“这是一个收银机应用程序的一个特定型号的平板电脑总是用在一个固定硬件docker“。

所以大多数应用程序应该让手机传感器,软件和物理configuration自己决定用户如何与您的应用程序进行交互。 但是,如果您对使用案例中sensor方向的默认行为不满意,您可能仍需要考虑一些情况:

  • 如果您的主要担心是意外的方向变化,那么您认为设备的传感器和软件将无法很好地应对(例如,在基于倾斜的游戏中)考虑支持横向和纵向,但是使用nosensor进行定向。 这在大多数手机上强制大多数平板电脑和人像的景观,但我仍然不会推荐这个大多数“普通”的应用程序(一些用户只喜欢在手机上键入风景softkeyboard,许多平板电脑用户阅读肖像 – 你应该让他们)。
  • 如果你仍然需要强迫肖像出于某种原因, sensorPortrait portrait可能会比Android 2.3以上的portrait更好; 这允许倒置的肖像,这在平板电脑使用中是相当普遍的。

我没有意识到AndroidManifest.xml文件切换,直到阅读这篇文章,所以在我的应用程序,我用这个,而不是:

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation 

在清单文件中添加android:screenOrientation="portrait"在这里声明你的活动

 <activity android:name=".yourActivity" .... android:screenOrientation="portrait"/> 

如果你想用java代码尝试

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

在你为onCreate()活动设置了内容onCreate()之前,希望有人帮助和容易理解。

这里的很多答案都build议在AndroidManifest.xml文件中使用"portrait" 。 这可能看起来是一个很好的解决scheme – 但正如文档中所指出的那样,您正在挑选那些只能拥有景观的设备。 你也迫使某些设备(在风景中最好的)进入肖像,而不是正确的方向。

我的build议是使用"nosensor"来代替。 这将使设备使用默认的首选方向,不会阻止Google Play上的任何购买/下载,并确保传感器不会混淆您的(NDK,在我的情况下)游戏。

如果你想要用户设置,

那么我build议setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

您可以从设置菜单更改设置。

我需要这个,因为我的计时器必须对应屏幕上的内容,旋转屏幕将会破坏当前的活动。

只需在您的清单中添加像这样的行

机器人:screenOrientation = “画像”

 <manifest package="com.example.speedtestmeter" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="ComparisionActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="GaugeView" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="Resultactivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> </application> </manifest> 

只需在您的活动标签中添加此属性。

  android:screenOrientation="portrait" 

您应该在AndroidManifest.xml中更改android:screenOrientation="sensorPortait"

在Activity的onCreate()中使用它

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

如果您不想在每个活动的清单条目中更好地添加方向,请创build一个BaseActivity类(inheritance“Activity”或“AppCompatActivity”),该类将由应用程序的每个活动而不是“Activity '或'AppCompatActivity',只需在BaseActivity中添加以下一段代码即可:

 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // rest of your code...... } 

在你的Manifest文件中添加以下代码片段。

 <activity android:name=".yourActivity" .... android:screenOrientation="portrait"/> 

这只支持肖像模式

android:screenOrientation="portrait"添加到要禁用横向模式的活动。

如果你想Landscape mode for your android app (或单个活动)禁用Landscape mode for your android app所有你需要做的就是添加,

android:screenOrientation="portrait"添加到AndroidManifest.xml文件中的activity标签。

喜欢:

 <activity android:name="YourActivityName" android:icon="@drawable/ic_launcher" android:label="Your App Name" android:screenOrientation="portrait"> 

另一种方式,程序化方法。

如果你想这样做编程,即。 使用Java代码。 您可以通过在不希望以横向模式显示的活动的Java类中添加以下代码来完成此操作。

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

我希望它可以帮助你。欲了解更多详细信息,请点击这里进入链接描述

使用

 android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" 

您必须设置每个活动的方向。

 <activity android:name="com.example.SplashScreen2" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> <activity android:name="com.example.Registration" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> <activity android:name="com.example.Verification" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> <activity android:name="com.example.WelcomeAlmostDone" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> <activity android:name="com.example.PasswordRegistration" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> 

在oncreate()方法中添加类

  setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

如果您使用Xamarin C#,这些解决scheme中的一些将无法正常工作。 这是我发现的解决scheme。

 [Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)] 

上面的课程运作良好,类似于其他解决scheme,也不是全球适用的,需要放在每个活动头。

如何在一些视图中改变方向

而不是locking整个活动的方向,你可以使用这个类dynamic地locking你的任何视图的方向:

让你的景观景观

 OrientationUtils.lockOrientationLandscape(mActivity); 

让你的观点肖像

 OrientationUtils.lockOrientationPortrait(mActivity); 

解锁方向

 OrientationUtils.unlockOrientation(mActivity); 

定向Util类

 import android.app.Activity; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.os.Build; import android.view.Surface; import android.view.WindowManager; /* * This class is used to lock orientation of android app in nay android devices */ public class OrientationUtils { private OrientationUtils() { } /** Locks the device window in landscape mode. */ public static void lockOrientationLandscape(Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } /** Locks the device window in portrait mode. */ public static void lockOrientationPortrait(Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } /** Locks the device window in actual screen mode. */ public static void lockOrientation(Activity activity) { final int orientation = activity.getResources().getConfiguration().orientation; final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay() .getRotation(); // Copied from Android docs, since we don't have these values in Froyo // 2.2 int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8; int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9; // Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) { SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; } if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) { if (orientation == Configuration.ORIENTATION_PORTRAIT) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) { if (orientation == Configuration.ORIENTATION_PORTRAIT) { activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT); } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) { activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } } } /** Unlocks the device window in user defined screen mode. */ public static void unlockOrientation(Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); } } 

只需将android:screenOrientation =“portrait”添加到应用程序清单中的activity标签即可。

例如:

  <activity android:name=".ui.activities.MainActivity" android:screenOrientation="portrait"></activity> 
 <android . . . > . . . <manifest . . . > . . . <application> <activity android:name=".MyActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation"> </activity> </application> </manifest> </android> 

你可以强制你的特定活动始终保持纵向模式,通过在manifest.xml中写入

  <activity android:name=".MainActivity" android:screenOrientation="portrait"></activity> 

您也可以通过在您的活动的onCreate()方法中写入以下行来强制您的活动保持在postrait模式

  @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } 

你应该把这个代码放在清单文件中…….

  <activity android:name=".SunderFlowersActivity" android:label="@string/app_name" android:screenOrientation="portrait"> > </activity> 

<apphome>/platform/android目录中创buildAndroidManifest.xml (从生成的一个复制它)。 然后将android:screenOrientation=portrait ”添加到所有活动元素。

在AndroidManifest.xml文件中添加android:screenOrientation =“portrait”。 example <activity android:name=".MapScreen" android:screenOrientation="portrait"></activity>

为了帮助其他人,在AndroidManifest.xml中的ACTIVITY的以下属性是你所需要的:

机器人:configChanges = “方向”

那么,完整的活动节点:

 <activity android:name="Activity1" android:icon="@drawable/icon" android:label="App Name" android:configChanges="orientation"> 

如果您的活动与第一个设备方向状态相关,则使用onCreate方法获取当前设备方向,然后永久修复:

  int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation(); if(deviceRotation == Surface.ROTATION_0) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else if(deviceRotation == Surface.ROTATION_180) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); } else if(deviceRotation == Surface.ROTATION_90) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else if(deviceRotation == Surface.ROTATION_270) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } 

在kotlin中也可以用下面的程序来实现

 requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 
  <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="in.co.nurture.bajajfinserv"> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <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="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

我们可以通过使用属性或android:screenOrientation来限制纵向或横向模式下的活动。

如果我们的计划中有不止一项活动,那么你就可以自由地限制任何一项活动,而不会影响其他你不想要的活动。