Pergunta

Como posso desativar o modo paisagem para algumas das vistas em meu aplicativo Android?

Foi útil?

Solução

Add android:screenOrientation="portrait" para a atividade no AndroidManifest.xml. Por exemplo:

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

EDIT: Uma vez que este tornou-se uma resposta super-popular, eu me sinto muito culpado quanto forçando retrato raramente é a solução certa para os problemas é frequentemente aplicadas a
. As principais ressalvas com retrato forçado:

  • Este não absolvê-lo de ter que pensar sobre a atividade ciclo de vida de eventos ou devidamente salvar / restaurar estado. Há uma abundância de coisas além rotação aplicativo que podem desencadear uma atividade destruição / recreação, incluindo coisas inevitáveis ??como multitarefa. Não existem atalhos; aprender a pacotes de uso e fragmentos retainInstance.
  • Tenha em mente que ao contrário da experiência bastante uniforme iPhone, existem alguns dispositivos onde retrato não é a orientação claramente popular. Quando os usuários estão em dispositivos com teclados de hardware ou consolas de jogos a la Escudo Nvidia, em Chromebooks , em foldables , ou na Samsung DeX , forçando retrato pode fazer sua experiência app quer limitar ou um aborrecimento usabilidade gigante. Se o seu aplicativo não tem um argumento UX forte que levaria a uma experiência negativa para apoiar outras orientações, você provavelmente não deve forçar paisagem. Estou falando de coisas como "este é um aplicativo registo de dinheiro para um modelo específico de tablet sempre utilizado em uma doca hardware fixo".

Assim, a maioria dos aplicativos deveria apenas deixar a sensores de telefone, software e configuração física tomar suas próprias decisões sobre como o usuário quer interagir com seu aplicativo. Alguns casos, você ainda pode querer pensar, porém, se você não está feliz com o comportamento padrão de orientação sensor em seu caso de uso:

  • Se a sua principal preocupação é a orientação acidental muda meados de atividade que você acha sensores e software do dispositivo não vai lidar com o bem (por exemplo, em um jogo baseado em tilt) considerar apoiar paisagem e retrato, mas usando nosensor para o orientação. Esta paisagem forças na maioria dos tablets e retrato na maioria dos telefones, mas eu ainda não recomendo este para a maioria dos aplicativos "normais" (alguns usuários como para digitar o softkeyboard paisagem em seus telefones, e muitos usuários de tablet ler no retrato - e você deve deixá-los).
  • Se você ainda necessidade de força retrato, por algum motivo, sensorPortrait pode ser melhor do que portrait para Android 2.3 +; isso permite retrato de cabeça para baixo, o que é bastante comum no uso tablet.

Outras dicas

Eu não estava ciente da opção de arquivo AndroidManifest.xml até ler este post, por isso em meus aplicativos que eu tenho usado este em vez disso:

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

Adicione esta android:screenOrientation="portrait" em seu arquivo de manifesto onde você declarar a sua actividade como esta

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

Se você quer fazer usando tentativa código java

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

antes de chamar o método setContentView para a sua atividade em onCreate().

Espero que isso ajuda e de fácil compreensão para todos ...

Muitas das respostas aqui estão sugerindo usar "portrait" em seu arquivo AndroidManifest.xml. Isto pode parecer uma boa solução - mas, como mencionado na documentação, você está recordando dispositivos que só pode ter paisagem. Você também estão forçando determinados dispositivos (que funcionam melhor na paisagem) para entrar em retrato, não recebendo a orientação adequada.

A minha sugestão é usar "nosensor" vez. Isso vai deixar o dispositivo para usar a sua orientação preferencial padrão, não vai bloquear todas as compras / downloads no Google Play, e vai garantir o sensor não atrapalhar o seu jogo (NDK, no meu caso).

Se você quiser usuário-configurações,

então eu recomendo setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Você pode alterar as configurações a partir de um menu de configurações.

Eu exijo isso porque meus temporizadores deve corresponder ao que está na tela, e girar a tela irá destruir a atividade atual.

Basta adicionar como esta linha em seu manifesto

android: screenOrientation = "retrato"

<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>   

Use isso em onCreate () da atividade

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Basta adicionar este atributo no seu tag de atividade.

 android:screenOrientation="portrait"

Se você não quer ir até o aborrecimento de adição de orientação em cada entrada manifesto de actividade melhor, criar uma classe BaseActivity (herda 'Atividade' ou 'AppCompatActivity'), que será herdada por todas as atividades de sua aplicação, em vez de 'Atividade' ou 'AppCompatActivity' e basta adicionar o seguinte trecho de código em sua BaseActivity:

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

Você deve alterar android:screenOrientation="sensorPortrait" em AndroidManifest.xml

Adicionar android:screenOrientation="portrait" para a atividade que você quer para o modo paisagem desativar.

Se você quiser desativar Landscape mode for your android app (ou uma única atividade) tudo que você precisa fazer é adicionar,

android:screenOrientation="portrait" para o tag de atividade no AndroidManifest.xml arquivo.

Como:

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

Another Way, Abordagem Programática.

Se você quer fazer isso programaticamente ie. usando o código Java. Você pode fazê-lo adicionando o código abaixo na classe Java da atividade que você não deseja ser exibido no modo paisagem.

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Eu espero que o ajude .Para mais informações você pode visitar aqui entrar descrição do link aqui

Como mudar a orientação em alguns dos vista

Em vez de bloquear a orientação da atividade inteira você pode usar essa classe para orientação de bloqueio dinamicamente a partir de qualquer um de sua visão de forma pragmática: -

Faça sua visão Paisagem

OrientationUtils.lockOrientationLandscape(mActivity);

Faça sua visão Retrato

OrientationUtils.lockOrientationPortrait(mActivity);

Desbloquear Orientação

OrientationUtils.unlockOrientation(mActivity);

Orientação 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);
    }

}

uso

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

Você deve definir a orientação de cada atividade.

<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>

class add dentro OnCreate () método

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Se você estiver usando Xamarin C # algumas dessas soluções não funcionará. Aqui está a solução que eu encontrei para trabalhar.

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

Acima da classe funciona bem, similar às outras soluções, também não globalmente aplicáveis ??e precisa ser colocado em cada cabeçalho de actividade.

Você pode forçar a sua atividade em particular para permanecer sempre no modo retrato, escrevendo isso no seu manifest.xml

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

Você também pode forçar sua atividade para permanecer no modo postrait escrevendo seguinte linha no onCreate da sua actividade () método

    @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>

Você pode fazer isso por toda a sua aplicação sem ter que fazer todas as suas atividades estender uma classe base comum.

O truque é para ter certeza de que você incluir uma subclasse de aplicativos em seu projeto. Na sua onCreate (), chamado quando o aplicativo é iniciado pela primeira vez, você registrar um objeto ActivityLifecycleCallbacks (nível API 14+) para receber notificações de eventos de ciclo de vida atividade.

Isto dá-lhe a oportunidade de executar seu próprio código sempre que qualquer atividade em seu aplicativo é iniciado (ou interrompido, ou restabelecida, ou qualquer outro). Neste ponto, você pode chamar setRequestedOrientation () sobre a atividade recém-criado.

E não se esqueça de fazer app: "MyApp". Name = em seu arquivo de manifesto

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);
            }
            ....
        });
    }
}

No diretório <apphome>/platform/android AndroidManifest.xml criado (copiá-lo daquele gerado). Em seguida, adicione android:screenOrientation= "portrait" para todos os elementos de actividade.

 <?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 a atividade no modo retrato ou paisagem usando o atributo ou android:. ScreenOrientation

se tivermos mais de uma atividade no meu programa, então você tem liberdade para restringir qualquer um dos actividade em qualquer modo e nunca efetuar os outros que você não quer.

Adicionar android:screenOrientation="portrait" em AndroidManifest.xml arquivo.

Por exemplo:

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

Adicionar abaixo elogiar em seu projeto,

npm install

npm i reagir nativo-orientação-armário

então você usar classe manifesto como, React_Native (sua pasta de projeto) / 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>

Obrigado!

Na mesma Kotlin pode ser programaticamente conseguido usando abaixo

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

Ela trabalhou para mim, tentar adicionar este código no arquivo 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>

De qualquer na classe manifesto.

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

ou programaticamente

setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Nota:. você deve chamar isso antes método setContentView para a sua atividade em onCreate()

Na esperança de ajudar alguém, o seguinte atributo sobre a atividade no AndroidManifest.xml é tudo que você precisa:

android: configChanges = "orientação"

Assim, o nó plena atividade:

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

Se a sua actividade relacionada com o primeiro estado a orientação do dispositivo, obter a orientação do dispositivo atual no método onCreate e depois corrigi-lo para sempre:

        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);
        }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top