如何在Android应用程序中为某些视图禁用横向模式?
如何在Android应用程序中为某些视图禁用横向模式?
Answers:
android:screenOrientation="portrait"
在AndroidManifest.xml中添加到活动。例如:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
编辑:由于这已成为一个非常受欢迎的答案,我感到非常内as,因为强行肖像很少能解决其经常遇到的问题。
强制肖像的主要警告:
retainInstance
碎片。因此,大多数应用程序应仅让电话传感器,软件和物理配置自行决定用户如何与您的应用程序进行交互。但是,如果您对用例中的默认sensor
定向行为不满意,可能仍然需要考虑以下几种情况:
nosensor
用于方向。这会在大多数平板电脑上强制使用横向模式,而在大多数手机上强制使用纵向模式,但是我仍然不建议在大多数“普通”应用程序中使用此功能(某些用户只是喜欢在手机上输入横向软键盘,而许多平板电脑用户会纵向阅读-并且您应该让他们)。sensorPortrait
可能会比portrait
Android 2.3+ 更好;这允许倒置人像,这在平板电脑使用中非常普遍。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);
在您setContentView
为中的活动调用方法之前onCreate()
。
希望这个帮助对所有人都容易理解...
建议"portrait"
您在AndroidManifest.xml文件中使用许多答案。这似乎是一个不错的解决方案-但正如文档中所述,您正在挑选出只有风景的设备。您还将迫使某些设备(在横向情况下最有效)进入纵向,而无法获得正确的方向。
我的建议是"nosensor"
改用。这将使设备使用其默认的首选方向,不会阻止在Google Play上的任何购买/下载,并确保传感器不会弄乱您的游戏(以我的情况为NDK)。
只需在清单中添加“喜欢此行”
android:screenOrientation =“ portrait”
<manifest
package="com.example.speedtest"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="ComparisionActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" >
</activity>
</application>
</manifest>
您可以为整个应用程序执行此操作,而不必使所有活动都扩展一个公共基类。
首先,要确保您的项目中包含Application子类。在其首次启动应用程序时调用的onCreate()中,注册一个ActivityLifecycleCallbacks对象(API级别14+)以接收活动生命周期事件的通知。
每当您启动或停止应用程序中的任何活动时,这都使您有机会执行自己的代码。此时,您可以在新创建的活动上调用setRequestedOrientation()。
并且不要忘记在清单文件中添加app:name =“。MyApp”。
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);
}
....
});
}
}
在Activity的onCreate()中使用它
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
您应该android:screenOrientation="sensorPortrait"
在AndroidManifest.xml中进行更改
只需在活动代码中添加此属性即可。
android:screenOrientation="portrait"
如果您不想在每个活动的清单条目中更好地添加方向的麻烦,请创建一个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......
}
如果您要禁用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);
希望对您有所帮助。有关更多详细信息,请访问此处,在此处输入链接说明
android:screenOrientation="nosensor">
如何在某些视图中更改方向
代替锁定整个活动的方向,您可以使用此类从实用的角度动态锁定任何视图的方向:-
使您的风景
OrientationUtils.lockOrientationLandscape(mActivity);
使您的视图人像
OrientationUtils.lockOrientationPortrait(mActivity);
解锁方向
OrientationUtils.unlockOrientation(mActivity);
方向实用程序类
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);
}
}
您必须设置每个活动的方向。
<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>
您可以通过在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);
}
<android . . . >
. . .
<manifest . . . >
. . .
<application>
<activity android:name=".MyActivity"
android:screenOrientation="portrait"
android:configChanges="keyboardHidden|orientation">
</activity>
</application>
</manifest>
</android>
添加以下对您的项目的表彰,
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>
谢谢!
<?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将活动限制为纵向或横向模式。
如果我们的程序中有多个活动,那么您可以自由地以任何一种方式限制任何一种活动,而它永远不会影响您不需要的其他活动。
为了希望对其他人有所帮助,您仅需要AndroidManifest.xml中ACTIVITY上的以下属性:
android:configChanges =“ orientation”
因此,完整活动节点:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
它对我有用,请尝试在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>
如果您的活动与第一个设备方向状态有关,请在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);
}