¿Cómo puedo desactivar el modo horizontal para algunas de las vistas en mi aplicación de Android?
¿Cómo puedo desactivar el modo horizontal para algunas de las vistas en mi aplicación de Android?
Respuestas:
Agregar android:screenOrientation="portrait"
a la actividad en el AndroidManifest.xml. Por ejemplo:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait" />
EDITAR: Dado que esta se ha convertido en una respuesta súper popular, me siento muy culpable ya que forzar el retrato rara vez es la solución correcta a los problemas a los que se aplica con frecuencia.
Las principales advertencias con retrato forzado:
retainInstance
fragmentos.Por lo tanto, la mayoría de las aplicaciones deberían dejar que los sensores del teléfono, el software y la configuración física tomen su propia decisión sobre cómo el usuario desea interactuar con su aplicación. Sin embargo, es posible que desee considerar algunos casos si no está satisfecho con el comportamiento predeterminado de sensor
orientación en su caso de uso:
nosensor
para la orientación. Esto fuerza el paisaje en la mayoría de las tabletas y el retrato en la mayoría de los teléfonos, pero aún así no lo recomendaría para la mayoría de las aplicaciones "normales" (a algunos usuarios simplemente les gusta escribir el teclado virtual horizontal en sus teléfonos, y muchos usuarios de tabletas leen en vertical) deberías dejarlos).sensorPortrait
puede ser mejor que portrait
para Android 2.3+; Esto permite un retrato al revés, que es bastante común en el uso de tabletas.No estaba al tanto del AndroidManifest.xml
cambio de archivo hasta que leí esta publicación, así que en mis aplicaciones he usado esto en su lugar:
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation
Agregue esto android:screenOrientation="portrait"
en su archivo de manifiesto donde declara su actividad como esta
<activity android:name=".yourActivity"
....
android:screenOrientation="portrait" />
Si quieres hacerlo usando el código Java prueba
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
antes de llamar al setContentView
método para su actividad enonCreate()
.
Espero que esta ayuda sea fácilmente comprensible para todos ...
Muchas de las respuestas aquí sugieren su uso "portrait"
en su archivo AndroidManifest.xml. Esto puede parecer una buena solución, pero como se señala en la documentación, está seleccionando dispositivos que solo pueden tener un paisaje. También está obligando a ciertos dispositivos (que funcionan mejor en paisaje) a ir en vertical, sin obtener la orientación adecuada.
Mi sugerencia es usar "nosensor"
en su lugar. Esto hará que el dispositivo use su orientación preferida predeterminada, no bloqueará ninguna compra / descarga en Google Play y garantizará que el sensor no estropee su juego (NDK, en mi caso).
Si quieres configuraciones de usuario,
entonces recomendaría setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Puede cambiar la configuración desde un menú de configuración.
Exijo esto porque mis temporizadores deben corresponder a lo que está en la pantalla, y girar la pantalla destruirá la actividad actual.
Simplemente agregue Me gusta esta línea en su manifiesto
android: screenOrientation = "retrato"
<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>
Puede hacer esto para toda su aplicación sin tener que hacer que todas sus actividades extiendan una clase base común.
El truco es primero asegurarse de incluir una subclase de aplicación en su proyecto. En su onCreate (), llamado cuando su aplicación se inicia por primera vez, registra un objeto ActivityLifecycleCallbacks (nivel de API 14+) para recibir notificaciones de eventos del ciclo de vida de la actividad.
Esto le brinda la oportunidad de ejecutar su propio código cada vez que se inicia cualquier actividad en su aplicación (o se detiene, se reanuda o lo que sea). En este punto, puede llamar a setRequestedOrientation () en la actividad recién creada.
Y no olvide agregar la aplicación: nombre = ". MyApp" en su archivo de manifiesto.
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);
}
....
});
}
}
Use esto en onCreate () de la Actividad
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Deberías cambiar android:screenOrientation="sensorPortrait"
en AndroidManifest.xml
Simplemente agregue este atributo en su etiqueta de actividad.
android:screenOrientation="portrait"
Si no desea pasar por la molestia de agregar mejor orientación en cada entrada manifiesta de actividad, cree una clase BaseActivity (hereda 'Activity' o 'AppCompatActivity') que será heredada por cada actividad de su aplicación en lugar de 'Activity 'o' AppCompatActivity 'y simplemente agregue el siguiente código en su BaseActivity:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// rest of your code......
}
Agregue android:screenOrientation="portrait"
a la actividad que desea deshabilitar el modo horizontal.
Si desea deshabilitar Landscape mode for your android app
(o una sola actividad) todo lo que necesita hacer es agregar,
android:screenOrientation="portrait"
a la etiqueta de actividad en el AndroidManifest.xml
archivo.
Me gusta:
<activity android:name="YourActivityName"
android:icon="@drawable/ic_launcher"
android:label="Your App Name"
android:screenOrientation="portrait">
Otra forma, enfoque programático.
Si quieres hacer esto programáticamente es decir. usando el código Java Puede hacerlo agregando el siguiente código en la clase Java de la actividad que no desea que se muestre en modo horizontal.
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Espero que te ayude. Para más detalles puedes visitar aquí ingresa la descripción del enlace aquí
android:screenOrientation="nosensor">
Cómo cambiar la orientación en algunas de las vistas
En lugar de bloquear la orientación de toda la actividad, puede usar esta clase para bloquear dinámicamente la orientación desde cualquiera de sus vistas de forma pragmática:
Haz tu vista Paisaje
OrientationUtils.lockOrientationLandscape(mActivity);
Haz tu vista Retrato
OrientationUtils.lockOrientationPortrait(mActivity);
Desbloquear orientación
OrientationUtils.unlockOrientation(mActivity);
Orientación 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);
}
}
Debe establecer la orientación de cada actividad.
<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>
Si está utilizando Xamarin C #, algunas de estas soluciones no funcionarán. Aquí está la solución que encontré para trabajar.
[Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)]
La clase anterior funciona bien, similar a las otras soluciones, tampoco es aplicable a nivel mundial y debe colocarse en cada encabezado de actividad.
Puede forzar que su actividad particular permanezca siempre en modo vertical escribiendo esto en su manifiesto.xml
<activity android:name=".MainActivity"
android:screenOrientation="portrait"></activity>
También puede forzar que su actividad permanezca en modo postrait escribiendo la siguiente línea en el método onCreate () de su actividad
@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>
Agregue a continuación elogio de su proyecto,
npm install
npm reacciono-nativo-orientación-armario
luego usa la clase de manifiesto como, React_Native (Your Project Folder) / 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>
¡Gracias!
En el <apphome>/platform/android
directorio creado AndroidManifest.xml
(copiándolo del generado). Luego agregue android:screenOrientation=
" portrait
" a TODOS los elementos de actividad.
<?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>
podemos restringir la Actividad en modo vertical u horizontal usando el atributo o android: screenOrientation.
si tenemos más de una actividad en mi programa, entonces usted tiene la libertad de restringir cualquiera de las actividades en cualquiera de los modos y nunca afectará a las otras que no desee.
Añadir android:screenOrientation="portrait"
en AndroidManifest.xml archivo.
Por ejemplo :
<activity android:name=".MapScreen"
android:screenOrientation="portrait"></activity>
Con la esperanza de ayudar a alguien más, todo lo que necesita es el siguiente atributo en ACTIVIDAD en AndroidManifest.xml:
android: configChanges = "orientación"
Entonces, nodo de actividad completa:
<activity android:name="Activity1"
android:icon="@drawable/icon"
android:label="App Name"
android:configChanges="orientation">
Funcionó para mí, intenta agregar este código en el archivo 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>
Ponlo en tu manifiesto.
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:screenOrientation="sensorPortrait" />
La orientación será vertical, pero si el teléfono del usuario está al revés, también mostrará la forma correcta. (Entonces su pantalla girará 180 grados).
El sistema ignora este atributo si la actividad se ejecuta en modo de ventanas múltiples .
si su actividad está relacionada con el primer estado de orientación del dispositivo, obtenga la orientación actual del dispositivo en el onCreate
método y luego corríjala para siempre:
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);
}