Jak zablokować orientację aplikacji na Androida do portretu na telefonach i poziomej na tabletach?


83

Tworzę aplikację na Androida, której orientacji nie chcę zmieniać na tryb poziomy, gdy użytkownik obraca urządzenie. Chcę też, aby zablokowana orientacja była pionowa na telefonach i pozioma na tabletach. Czy można to osiągnąć, a jeśli tak, to w jaki sposób? Dzięki.


2
@CommonsWare: Moja aplikacja ma menu z długimi listami, które są znacznie wydajniejsze w trybie portretowym na telefonach.
Ankit Rawat

3
Następnie wymyśl lepszy projekt GUI, który szanuje zdolność użytkowników do korzystania z urządzeń w dowolnej orientacji.
CommonsWare

Odpowiedzi:


157

Musisz tylko zdefiniować właściwość poniżej w elemencie działania w swoim AndroidManifest.xmlpliku. Ograniczy twoją orientację do portretu.

android: screenOrientation = "portret"

Przykład:

        <activity
            android:name="com.example.demo_spinner.MainActivity"
            android:label="@string/app_name"
            android:screenOrientation="portrait" >
        </activity>

jeśli chcesz, aby dotyczyło to całej aplikacji, zdefiniuj właściwość poniżej wewnątrz tagu aplikacji w następujący sposób:

        <application>
         android:screenOrientation="sensorPortrait"
        </application>

Dodatkowo, zgodnie z komentarzem Eduarda Luca poniżej, możesz również użyć, screenOrientation="sensorPortrait"jeśli chcesz włączyć obrót o 180 stopni.


21
Lub sensorPortraitjeśli chcesz, aby użytkownik mógł obracać ekran o 180 stopni :)
Eduard Luca

44

Musisz dodać android:screenOrientation="portrait"dyrektywę do swojego AndroidManifest.xml. Należy to zrobić w swoim <activity>tagu.

Ponadto przewodnik dla programistów aplikacji na Androida stwierdza, że:

[...] należy również wyraźnie zadeklarować, że aplikacja wymaga orientacji pionowej lub poziomej z elementem. Na przykład <uses-feature android:name="android.hardware.screen.portrait" />.


6
+1 za cytat z dobrej praktyki i ponieważ to powinna być zaakceptowana odpowiedź, ponieważ jest poprawna i została opublikowana jako pierwsza ...
Eduard Luca

7
Czy istnieje globalny sposób?
Tyler Pfaff

21

Widzę, że zaakceptowałeś odpowiedź, która nie rozwiązuje całkowicie twojego problemu:

android:screenOrientation="portrait" 

Spowoduje to wymuszenie pionowego wyświetlania aplikacji na telefonach i tabletach.

Możesz wymusić ustawienie aplikacji w „preferowanej” orientacji urządzenia za pomocą

android:screenOrientation="nosensor"

Spowoduje to wymuszenie pionowego wyświetlania aplikacji na większości telefonów i poziomego na tabletach. Istnieje wiele telefonów z klawiaturą, które zostały zaprojektowane do pracy w trybie poziomym. Zmuszenie aplikacji do portretu może spowodować, że będzie ona prawie bezużyteczna na takich urządzeniach. Android jest ostatnio migrowany również na inne typy urządzeń. Najlepiej po prostu pozwolić urządzeniu wybrać preferowaną orientację.


Dla tych, którzy są ciekawi ustawienia „nosensor”, można przeczytać więcej w oficjalnych dokumentach pod adresem developer.android.com/guide/topics/manifest/activity-element
James Jordan Taylor

11

Może to być ... musisz programowo zidentyfikować tablet lub telefon ... Najpierw sprawdź, czy urządzenie to telefon lub tablet

Sprawdź, czy urządzenie to smartfon czy tablet?

Tablet lub telefon - Android

Następnie......

if(isTablet)
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);      
}else
{
      setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Cześć @Bhavesh, to nie działa na urządzeniach mobilnych z Androidem 9.
Manikandan K

jak możemy zidentyfikować, czy jest to tablet ... nie wyjaśniłeś tego ...
Abdul Wahid

Możesz zobaczyć edytowaną odpowiedź. Dołączyłem, jak ustalić, czy urządzenie to smartfon czy tablet?
Bhavesh Hirpara

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

dodaj do głównego działania i dodaj

android:configChanges="keyboardHidden"

aby program nie zmieniał trybu po wywołaniu klawiatury.



0
android:screenOrientation="locked"

w <application>przypadku wszystkich aplikacji w <activity>ramach bieżącej aktywności


0

Ustaw orientację ekranu na pionową w pliku manifestu pod znacznikiem aktywności.

Oto przykład

Musisz wejść w każde działanie

Dodaj następujące wiersze do działania

do portretu

android:screenOrientation="portrait"
tools:ignore="LockedOrientationActivity"

do krajobrazu

android:screenOrientation="landscape"
tools:ignore="LockedOrientationActivity"

Tutaj przykład MainActivity

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="org.thcb.app">
 
    <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"
            tools:ignore="LockedOrientationActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

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

</manifest>


-1

Poprostu dodaj:

android:screenOrientation="portrait"

w „ AndroidManifest.xml ”:

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
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.