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?

James
sumber

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.
Cristian
sumber
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"

Praveen
sumber
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.
Solusi Kode Android
sumber
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);
Meysam Keshvari
sumber
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;-)

Codebeat
sumber
-5

saya menggunakan

 android:screenOrientation="nosensor"

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

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