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


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.

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"


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.

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

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


-5

używam

 android:screenOrientation="nosensor"

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.