Quero que meu aplicativo Android seja executado apenas no modo retrato?

358

Quero que meu aplicativo Android seja executado apenas no modo retrato? Como eu posso fazer isso?

James
fonte

Respostas:

778

No manifesto, defina isso para todas as suas atividades:

<activity android:name=".YourActivity"
    android:configChanges="orientation"
    android:screenOrientation="portrait"/>

Deixe-me explicar:

  • Com android:configChanges="orientation"você, diga ao Android que você será responsável pelas mudanças de orientação.
  • android:screenOrientation="portrait" você define o modo de orientação padrão.
Cristian
fonte
50
Não seria ótimo Se pudéssemos definir uma orientação "global" para TODAS as atividades no Aplicativo? Parece que temos outra opção senão copiar / colar o atributo "retrato" em cada atividade ...
Eduardo Coelho
63
É o suficiente para definirandroid:screenOrientation="portrait"
até
11
@EduardoCoelho você pode realmente fazer uma classe base PortraitActivitye no onCreate chamar setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Todas as atividades estendendo isso não irá girar
Twinone
11
@Twinone: Que tal quando atividades diferentes desejam herdar de subclasses diferentes Activity, como uma atividade se estende ListActivityenquanto outras se estendem simplesmente Activity?
RestInPeace
3
@RestInPeace Sim, bom ponto. Mas isso não é minha idéia de estar errado, isso é apenas Java não apoiar a herança múltipla :)
Twinone
57

No arquivo de manifesto Android, coloque atributo para o <activity>queandroid:screenOrientation="portrait"

Praveen
fonte
2
deixe-me adicionar: do Android Sudio 3.6, é necessário usar o android: screenOrientation = "fullSensor" ou o android: screenOrientation = "não especificado". fullSensor Significa que você tem a opção "Girar desligado" ou não, isso mudará a orientação com base na movimentação do telefone. não especificado Significa que se você estiver com o botão Girar desativado, ele permanecerá apenas nessa orientação e, caso contrário, mudará a orientação com base na movimentação do telefone.
Kirguduck 5/04
24

Existem duas maneiras,

  1. Adicionar android:screenOrientation="portrait"para cada atividade no arquivo de manifesto
  2. Adicione this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);em cada arquivo java.
Solução Android Code
fonte
14
A segunda opção tem o horrível efeito colateral de reiniciar sua atividade quando iniciada no Portrait.
Joakim
4

no manifesto:

<activity android:name=".activity.MainActivity"
        android:screenOrientation="portrait"
        tools:ignore="LockedOrientationActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

ou: no MainActivity

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Meysam Keshvari
fonte
Eu entendo app/src/main/AndroidManifest.xml; lineNumber: 20; columnNumber: 50; The prefix "tools" for attribute "tools:ignore" associated with an element type "activity" is not bound.. A adição xmlns:tools="http://schemas.android.com/tools"do elemento raiz resolve o problema
Żabojad
3

Post antigo que eu conheço. Para executar seu aplicativo sempre no modo retrato, mesmo quando a orientação pode ser ou é trocada etc. (por exemplo, em tablets), projetei esta função que é usada para definir o dispositivo na orientação correta sem a necessidade de saber como o retrato e a paisagem recursos estão organizados no dispositivo.

   private void initActivityScreenOrientPortrait()
    {
        // Avoid screen rotations (use the manifests android:screenOrientation setting)
        // Set this to nosensor or potrait

        // Set window fullscreen
        this.activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

        DisplayMetrics metrics = new DisplayMetrics();
        this.activity.getWindowManager().getDefaultDisplay().getMetrics(metrics);

         // Test if it is VISUAL in portrait mode by simply checking it's size
        boolean bIsVisualPortrait = ( metrics.heightPixels >= metrics.widthPixels ); 

        if( !bIsVisualPortrait )
        { 
            // Swap the orientation to match the VISUAL portrait mode
            if( this.activity.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT )
             { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); }
            else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ); }
        }
        else { this.activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); }

    }

Funciona como um encanto!

AVISO: Altere de acordo this.activitycom sua atividade ou adicione-o à atividade principal e remova this.activity;-)

Codebeat
fonte
-5

eu uso

 android:screenOrientation="nosensor"

É útil se você não deseja suportar o modo retrato de cabeça para baixo.

user2305886
fonte
se isso faz o que eu acho que faz, na verdade não força a tela a retratar, o que você pode querer fazer.
Lassi Kinnunen
Por que você não remove este comentário? não faz sentido #
Alexander Zaldostanov
No arquivo de manifesto do Android, basta adicionar atributo para a sua <atividade> que o android: screenOrientation = "portrait"
Avinash Shinde
Obrigado pela sua resposta, isso é útil para mim.
Md. Shofiulla 29/03