Chcę, aby moja aplikacja na Androida działała tylko w trybie portretowym?

358

Chcę, aby moja aplikacja na Androida działała tylko w trybie portretowym? Jak mogę to zrobić?

James
źródło

Odpowiedzi:

778

W manifeście ustaw to dla wszystkich swoich działań:

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

Pozwól mi wyjaśnić:

  • Wraz z android:configChanges="orientation"Androidem powiesz, że będziesz odpowiedzialny za zmiany orientacji.
  • android:screenOrientation="portrait" ustawiłeś domyślny tryb orientacji.
Cristian
źródło
50
Nie byłoby wspaniale, gdybyśmy mogli ustawić orientację „globalną” dla WSZYSTKICH działań w aplikacji? Wygląda na to, że nie mamy innej opcji niż skopiowanie / wklejenie atrybutu „portret” dla każdej aktywności ...
Eduardo Coelho
63
To wystarczy do zestawuandroid:screenOrientation="portrait"
Till
11
@EduardoCoelho, możesz faktycznie stworzyć klasę podstawową PortraitActivityi podczas połączenia onCreate setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Wszystkie działania rozszerzające to nie będą się obracać
Twinone
1
@Twinone: Co powiesz na to, kiedy różne działania chcą odziedziczyć po różnych podklasach Activity, tak jak jedno działanie sięga, ListActivitya inne po prostu Activity?
RestInPeace
3
@RestInPeace Tak, dobra uwaga. Ale to nie jest mój pomysł, że się mylę, to po prostu Java nie obsługuje wielokrotnego dziedziczenia :)
Twinone
57

W pliku manifestu Androida umieść dla <activity>tego atrybutandroid:screenOrientation="portrait"

Praveen
źródło
2
pozwól mi dodać: z Androida Sudio 3.6 muszę używać Androida: screenOrientation = „fullSensor” lub android: screenOrientation = „unspecified”. fullSensor Oznacza, że ​​masz opcję „Obróć” lub nie, spowoduje to zmianę orientacji w zależności od tego, jak poruszasz telefonem. nieokreślony Oznacza, że ​​jeśli masz WŁĄCZONY Obrót, pozostanie on tylko w tej orientacji, a jeśli nie, zmieni orientację w oparciu o ruch telefonu.
Kirguduck
24

Istnieją dwa sposoby

  1. Dodaj android:screenOrientation="portrait"dla każdego działania w pliku manifestu
  2. Dodaj this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);do każdego pliku Java.
Rozwiązanie Android Code
źródło
14
Druga opcja ma okropny efekt uboczny, że wznowi twoją aktywność, gdy zaczniesz w Portret.
Joakim
4

w manifeście:

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

lub: w MainActivity

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Meysam Keshvari
źródło
I dostać 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.. Dodanie xmlns:tools="http://schemas.android.com/tools"elementu głównego rozwiązuje problem
Żabojad
3

Stary post, który znam. Aby aplikacja działała zawsze w trybie pionowym, nawet gdy orientacja może być lub jest zamieniona itp. (Na przykład na tabletach) zaprojektowałem tę funkcję, która służy do ustawiania urządzenia we właściwej orientacji, bez konieczności poznawania orientacji pionowej i poziomej funkcje są zorganizowane na urządzeniu.

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

    }

Działa jak marzenie!

UWAGA: Zmień this.activitywedług swojej aktywności lub dodaj ją do głównej aktywności i usuń this.activity;-)

Codebeat
źródło
-5

używam

 android:screenOrientation="nosensor"

Jest to pomocne, jeśli nie chcesz obsługiwać pionowego trybu portretowego.

użytkownik2305886
źródło
jeśli robi to, co myślę, że tak, to tak naprawdę nie zmusza ekranu do portretu, co możesz chcieć zrobić.
Lassi Kinnunen
dlaczego po prostu nie usuniesz tego komentarza! to nie ma sensu
Alexander Zaldostanov
W pliku manifestu Androida po prostu dodaj atrybut <aktywność> tego Androida: screenOrientation = "portrait"
Avinash Shinde
Dziękuję za odpowiedź, to jest dla mnie pomocne.
Pani Shofiulla