如何在Android应用中为某些视图禁用横向模式?
答案 0 :(得分:1521)
将android:screenOrientation="portrait"
添加到AndroidManifest.xml中的活动。例如:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
编辑:由于这已成为一个非常受欢迎的答案,我感到非常内疚,因为强迫肖像很少是解决它经常应用的问题的正确方法。retainInstance
片段。因此,大多数应用应该让手机传感器,软件和物理配置自行决定用户如何与您的应用进行互动。但是,如果您对用例中sensor
方向的默认行为不满意,可能仍需要考虑一些案例:
nosensor
可能比Android {3}更好sensorPortrait
;这允许颠倒的肖像,这在平板电脑的使用中很常见。答案 1 :(得分:102)
在阅读此帖之前,我不知道AndroidManifest.xml
文件切换,所以在我的应用中我使用了这个:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
答案 2 :(得分:39)
在您宣传活动的清单文件中添加此android:screenOrientation="portrait"
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
如果你想使用java代码试试
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
在setContentView
之前为您的活动调用onCreate()
方法。
希望对所有人有所帮助并且容易理解......
答案 3 :(得分:25)
这里的很多答案都建议在AndroidManifest.xml文件中使用"portrait"
。这看起来似乎是一个很好的解决方案 - 但正如文档中所述,您正在挑选出可能只有景观的设备。您还强制某些设备(在横向上效果最佳)进入人像,而不是正确的方向。
我的建议是使用"nosensor"
代替。这将使设备使用其默认首选方向,不会阻止在Google Play上进行任何购买/下载,并确保传感器不会弄乱您的(NDK,在我的情况下)游戏。
答案 4 :(得分:11)
如果您想要用户设置,
然后我建议setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
您可以从设置菜单更改设置。
我需要这个,因为我的计时器必须与屏幕上的内容相对应,旋转屏幕会破坏当前的活动。
答案 5 :(得分:9)
只需在你的清单中添加Like this Line
android:screenOrientation =“portrait”
<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>
答案 6 :(得分:7)
在活动的onCreate()中使用它
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
答案 7 :(得分:6)
如果您不想更好地处理在每个清单活动条目中添加方向的麻烦,请创建一个BaseActivity类(继承'Activity'或'AppCompatActivity'),它将由应用程序的每个活动继承而不是'Activity'或'AppCompatActivity',只需在BaseActivity中添加以下代码:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
答案 8 :(得分:6)
您应该在AndroidManifest.xml中更改android:screenOrientation="sensorPortait"
答案 9 :(得分:6)
只需在您的活动代码中添加此属性即可。
android:screenOrientation="portrait"
答案 10 :(得分:5)
如果您要停用 Landscape mode for your android app
(或单个活动),您需要做的就是添加,
android:screenOrientation="portrait"
到 AndroidManifest.xml
文件中的活动代码。
像:
<activity android:name="YourActivityName"
android:icon="@drawable/ic_launcher"
android:label="Your App Name"
android:screenOrientation="portrait">
另一种方式,程序化方法。
如果你想以编程方式这样做,即。使用Java代码。您可以通过在不希望以横向模式显示的活动的Java类中添加以下代码来执行此操作。
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
我希望对您有所帮助。有关详细信息,请访问enter link description here
答案 11 :(得分:5)
将android:screenOrientation="portrait"
添加到要禁用横向模式的活动。
答案 12 :(得分:5)
在您的清单文件中添加以下代码段。
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait"/>
此支持仅限肖像模式
答案 13 :(得分:4)
您必须设置每项活动的方向。
<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>
答案 14 :(得分:4)
使用
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="portrait"
答案 15 :(得分:4)
在oncreate()方法中添加类
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
答案 16 :(得分:4)
如果您使用 Xamarin C#,其中一些解决方案将无效。这是我发现的解决方案。
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
在课程上方运作良好,与其他解决方案类似,也不是全局适用的,需要放在每个活动标题中。
答案 17 :(得分:4)
如何在某些视图中更改方向
您可以使用此类动态锁定任何视图的方向,而不是锁定整个活动的方向: -
制作视图 风景
OrientationUtils.lockOrientationLandscape(mActivity);
制作视图 人像
OrientationUtils.lockOrientationPortrait(mActivity);
解锁 方向
OrientationUtils.unlockOrientation(mActivity);
Orientation Util Class
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);
}
}
答案 18 :(得分:4)
您可以通过将此文件写入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);
}
答案 19 :(得分:4)
简单地添加
android:screenOrientation="portrait"
到应用程序清单中的activity标记。
例如:
<activity android:name=".ui.activities.MainActivity"
android:screenOrientation="portrait"></activity>
答案 20 :(得分:4)
您应将此代码放入清单文件.......
<activity android:name=".SunderFlowersActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
>
</activity>
答案 21 :(得分:3)
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
答案 22 :(得分:3)
您可以为整个应用程序执行此操作,而无需使所有活动扩展为公共基类。
首先要确保在项目中包含Application子类。在您的应用首次启动时调用的onCreate()中,您注册了一个ActivityLifecycleCallbacks对象(API级别14+)以接收活动生命周期事件的通知。
这使您有机会在应用程序中的任何活动启动(或停止,恢复或其他任何活动)时执行您自己的代码。此时,您可以在新创建的活动上调用setRequestedOrientation()。
不要忘记添加app:name =&#34; .MyApp&#34;在您的清单文件中。
class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// register to be informed of activities starting up
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity,
Bundle savedInstanceState) {
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
....
});
}
}
答案 23 :(得分:2)
在您的项目中添加以下建议,
npm安装
npm我反应本机定向储物柜
然后您使用清单类, React_Native(您的项目文件夹)/ android / app / src / main / AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<application
android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
</application>
谢谢!
答案 24 :(得分:2)
<?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限制纵向或横向模式下的活动。
如果我的程序中有多个活动,那么您可以自由地限制任何一种模式中的任何活动,并且它永远不会影响您不想要的其他活动。
答案 25 :(得分:2)
在<apphome>/platform/android
目录中创建AndroidManifest.xml
(从生成的目录中复制它)。
然后将android:screenOrientation=
“portrait
”添加到所有活动元素。
答案 26 :(得分:2)
将其放入清单中。
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
方向将为纵向,但如果用户的手机倒置,则也将显示正确的方式。 (这样您的屏幕就会旋转180度)。
如果活动在以下位置运行,系统忽略该属性 多窗口模式。
答案 27 :(得分:2)
在 AndroidManifest.xml 文件中添加android:screenOrientation="portrait"
。
例如:
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
答案 28 :(得分:1)
在kotlin中,可以使用以下
以编程方式实现requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
答案 29 :(得分:1)
它适用于我,尝试在AndroidManifest文件中添加此代码
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:screenOrientation="portrait"
android:theme="@style/AppTheme">
....
....
</application>
答案 30 :(得分:0)
如果要对特定活动应用模式,请在清单android:screenOrientation="portrait"
中添加此名称,并在所需的活动标签中进行定义。或在整个应用的应用标签中定义。喜欢
<application
....
android:screenOrientation="portrait"
</application>
答案 31 :(得分:0)
如果您的活动与第一个设备方向状态相关,请使用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);
}
答案 32 :(得分:0)
为了帮助其他人,AndroidManifest.xml中ACTIVITY的以下属性就是您所需要的:
机器人:configChanges = “取向”
所以,完整活动节点:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">