Saya ingin aplikasi Android saya hanya berjalan dalam mode potret?


359

Saya ingin aplikasi Android saya hanya berjalan dalam mode potret? Bagaimana saya bisa melakukan itu?

Jawaban:


779

Dalam manifes, tetapkan ini untuk semua aktivitas Anda:

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

Biarkan saya jelaskan:

  • Dengan android:configChanges="orientation"Anda memberi tahu Android bahwa Anda akan bertanggung jawab atas perubahan orientasi.
  • android:screenOrientation="portrait" Anda mengatur mode orientasi default.

50
Tidakkah hebat jika kita dapat menetapkan orientasi "global" untuk SEMUA aktivitas dalam Aplikasi? Sepertinya kita tidak punya pilihan selain menyalin / menempelkan atribut "potret" di setiap aktivitas ...
Eduardo Coelho

63
Sudah cukup untuk mengaturandroid:screenOrientation="portrait"
Hingga

11
@EduardoCoelho Anda benar-benar dapat membuat kelas dasar PortraitActivitydan di panggilan onCreate setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)Semua aktivitas yang memperpanjang ini tidak akan berputar
Twinone

1
@Twinone: Bagaimana ketika aktivitas yang berbeda ingin mewarisi dari subclass yang berbeda Activity, seperti satu aktivitas memanjang dari ListActivitysementara yang lain hanya memperpanjang dari Activity?
RestInPeace

3
@ RestInPeace Ya, poin bagus. Tapi itu bukan ide saya yang salah, itu hanya Jawa tidak mendukung multiple inheritance :)
Twinone

57

Di File Manifes Android, berikan atribut untuk <activity>ituandroid:screenOrientation="portrait"


2
izinkan saya untuk menambahkan: dari Android Sudio 3.6 perlu menggunakan android: screenOrientation = "fullSensor" atau android: screenOrientation = "tidak ditentukan". fullSensor Berarti Anda memiliki ON "Rotate off" atau tidak itu akan mengubah orientasi berdasarkan Anda memindahkan telepon. Berarti tidak ditentukan jika Anda memiliki ON Rotate off maka itu akan tetap hanya dalam orientasi itu dan jika tidak maka itu akan mengubah orientasi berdasarkan Anda memindahkan telepon.
Kirguduck

24

Ada dua cara,

  1. Tambahkan android:screenOrientation="portrait"untuk setiap Kegiatan di File Manifest
  2. Tambahkan this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);di setiap file java.

14
Opsi kedua memiliki efek samping mengerikan yang akan memulai kembali aktivitas Anda ketika dimulai di dalam Portrait.
Joakim

4

dalam manifes:

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

atau: di MainActivity

@SuppressLint("SourceLockedOrientationActivity")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Saya mengerti 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.. Menambahkan xmlns:tools="http://schemas.android.com/tools"elemen root memecahkan masalah
Żabojad

3

Posting lama saya tahu. Untuk menjalankan aplikasi Anda selalu dalam mode potret bahkan ketika orientasi mungkin atau ditukar dll (misalnya pada tablet) saya merancang fungsi ini yang digunakan untuk mengatur perangkat dalam orientasi yang benar tanpa perlu tahu bagaimana potret dan lansekap fitur disusun pada perangkat.

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

    }

Bekerja seperti pesona!

PEMBERITAHUAN: Ubah this.activityaktivitas Anda atau tambahkan aktivitas utama dan hapus this.activity;-)


-5

saya menggunakan

 android:screenOrientation="nosensor"

Akan sangat membantu jika Anda tidak ingin mendukung mode potret sisi atas.


jika ini sesuai dengan apa yang saya pikirkan, itu tidak memaksa layar untuk memotret, yang mungkin ingin Anda lakukan.
Lassi Kinnunen

kenapa tidak Anda hapus saja komentar ini! itu tidak masuk akal
Alexander Zaldostanov

Di Android Manifest File, tambahkan saja atribut untuk <aktivitas Anda bahwa android: screenOrientation = "portrait"
Avinash Shinde

Terima kasih atas jawaban Anda, ini sangat membantu saya.
Md. Shofiulla
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.