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.

Ankit Rawat
źródło
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.

RobinHood
źródło
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" />.

Halim Qarroum
źródło
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ę.

Radu Simionescu
źródło
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);
}
Bhavesh Hirpara
źródło
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.

Sumodh S.
źródło
1

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

Zachwycający kumar
źródło
0
android:screenOrientation="locked"

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

Anton Shikhert
źródło
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>

Chetan
źródło
-1

Poprostu dodaj:

android:screenOrientation="portrait"

w „ AndroidManifest.xml ”:

<activity
android:screenOrientation="portrait"
android:name=".MainActivity"
android:label="@string/app_name">
</activity>
himanshu jain
źródło