Bagaimana cara mengatur seluruh aplikasi dalam mode potret saja?


201

Bagaimana cara mengaturnya sehingga aplikasi berjalan dalam mode potret saja? Saya ingin mode lansekap dinonaktifkan saat aplikasi sedang berjalan. Bagaimana saya melakukannya secara terprogram?

Jawaban:


293

Untuk versi Android apa pun

Dari XML

Anda dapat menentukan android:screenOrientation="portrait"untuk setiap aktivitas dalam file manifest.xml Anda. Anda tidak dapat menentukan opsi ini pada applicationtag.

Dari jawa

Opsi lain adalah melakukannya secara terprogram, misalnya dalam Activitykelas dasar:

@Override
public void onCreate(Bundle savedInstanceState) {
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}

Untuk Android 4+ (API 14+)

Opsi terakhir adalah melakukannya dengan pendengar siklus aktivitas yang hanya tersedia sejak Android 4.0 (API 14+). Semuanya terjadi di Applicationkelas khusus :

@Override
public void onCreate() {
    super.onCreate();  
    registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
        @Override
        public void onActivityCreated(Activity a, Bundle savedInstanceState) {
            a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
    });
}

ActivityLifecycleAdapterhanya kelas pembantu yang harus Anda buat yang akan menjadi implementasi kosong ActivityLifecycleCallbacks(jadi Anda tidak perlu menimpa setiap dan setiap metode dari antarmuka itu saat Anda hanya membutuhkannya).


1
ini tidak bekerja. beralih ke mode lansekap ketika saya memutar perangkat. dan lebih banyak hal dalam kode saya menggunakan setRequestedOrientation ini (ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_SENSOR); instruksi untuk bilah kemajuan. apakah ada masalah dengan instruksi ini?
naresh

bekerja. satu hal lagi jangan letakkan dua instruksi di atas di bagian coding Anda. itu berarti memungkinkan sensor untuk mengubah orientasi layar.
naresh

3
-1: Penanya secara khusus meminta cara melakukannya // secara terprogram //, dan untuk seluruh aplikasi (yang membuat saya yakin mereka tidak ingin melakukannya untuk setiap aktivitas secara individu).
jwir3

@ jwir3, saya tidak setuju. "pemrograman" bukan hanya menulis kode kode, itu juga semua file meta, sumber daya yang Anda gunakan, bekerja di sekitar keanehan IDE, dll. Ini adalah jawaban yang baik, memperbaiki masalah dan OP menandainya sebagai benar. rupanya jawaban yang cukup untuk pertanyaan awal.
James Webster

9
menggunakan metode LifeCycleCallbacks Anda akan memiliki keterlambatan dalam peluncuran aktivitas ketika Anda memegang perangkat dalam mode lansekap (apa yang biasanya). Saya kira itu karena perangkat kembali ke mode lansekap secara singkat di antara kegiatan dan perlu waktu untuk menangani ini. Mengatur orientasi dalam manifes tidak memiliki efek ini.
Anonim

142

Ya, Anda dapat melakukan ini secara terprogram dan untuk semua aktivitas Anda dengan membuat AbstractActivity yang diperluas oleh semua aktivitas Anda.

public abstract class AbstractActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }
}

Aktivitas abstrak ini juga dapat digunakan untuk menu global.


3
Catatan: Saya percaya itu ActivityInfo.SCREEN_ORIENTATION_NOSENSORseharusnya menjadi jawaban yang lebih baik karena ini dimaksudkan untuk meninggalkan perangkat dalam keadaan default karena beberapa perangkat tidak memiliki orientasi Portrait. Namun, 'nosensor' TIDAK bekerja untuk saya, jadi jawaban @ arcone mewakili saya.
David Manpearl

104

Anda dapat melakukan ini untuk seluruh aplikasi Anda tanpa harus membuat semua aktivitas Anda memperpanjang kelas dasar bersama.

Caranya adalah pertama-tama untuk memastikan Anda memasukkan Applicationsubclass dalam proyek Anda. Di dalamnya onCreate(), dipanggil ketika aplikasi Anda pertama kali dinyalakan, Anda mendaftarkan ActivityLifecycleCallbacksobjek (API level 14+) untuk menerima pemberitahuan peristiwa siklus hidup aktivitas.

Ini memberi Anda kesempatan untuk mengeksekusi kode Anda sendiri setiap kali setiap aktivitas dalam aplikasi Anda dimulai (atau berhenti, atau dilanjutkan, atau apa pun). Pada titik ini Anda dapat memanggil setRequestedOrientation()aktivitas yang baru dibuat.

class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();  

        // register to be informed of activities starting up
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

            @Override
            public void onActivityCreated(Activity activity, 
                                          Bundle savedInstanceState) {

                // new activity created; force its orientation to portrait
                activity.setRequestedOrientation(
                    ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

            }

            ....

        });

    }
}

9
ini adalah satu-satunya jawaban yang menjawab pertanyaan itu. Satu baris untuk mengatur semuanya.
Samuel

2
* Satu kelas untuk memerintah mereka semua.
Jay Mayu

3
dan jangan pernah lupa menambahkan di root aplikasi manifes. android: name = ". MyApp"
Faisal Naseer

2
Pendekatan ini memanggil onCreate () dari aktivitas dua kali.
Sandeep R

3
Masalahnya adalah ketika Anda memegang perangkat secara horizontal dan memulai aktivitas baru, itu muncul dalam orientasi lanskap dan kemudian berputar ke potret. Sepertinya satu-satunya cara yang baik untuk mengunci aplikasi penuh dalam orientasi potret adalah dengan menandai setiap aktivitas di Manifest.
Den

42

Anda dapat mengatur ini di file manifes Anda ..

android:name=".your launching activity name"
android:screenOrientation="portrait"

dan Anda juga dapat mencapai hal yang sama dengan menulis kode di file kelas Anda seperti:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

1
@ naresh tolong terima ans jika kamu punya solusi sesuai dengan kebutuhanmu, itu akan memacu peringkatmu juga
SRam

24

Tambahkan android: screenOrientation = "portrait" ke aktivitas di AndroidManifest.xml. Sebagai contoh:

<activity android:name=".SomeActivity"
    android:label="@string/app_name"
    android:screenOrientation="portrait">

25
Dia mengatakan APLIKASI bukan kegiatan.
Reinherd

10

Menggunakan:

android:screenOrientation="portrait" 

Tulis saja baris ini di file manifes aplikasi Anda di setiap aktivitas yang ingin Anda tampilkan dalam mode potret saja.


8

Tulis ini ke file manifes Anda, untuk setiap aktivitas:

android:screenOrientation="portrait" 

2

Seperti dari panduan pengembang Android:

"orientasi" Orientasi layar telah berubah - pengguna telah memutar perangkat. Catatan: Jika aplikasi Anda menargetkan API level 13 atau lebih tinggi (seperti yang dinyatakan oleh atribut minSdkVersion dan targetSdkVersion), maka Anda juga harus mendeklarasikan konfigurasi "screenSize", karena itu juga berubah ketika perangkat beralih antara orientasi potret dan lanskap.

"screenSize" Ukuran layar yang tersedia saat ini telah berubah. Ini mewakili perubahan dalam ukuran yang tersedia saat ini, relatif terhadap rasio aspek saat ini, sehingga akan berubah ketika pengguna beralih antara lanskap dan potret. Namun, jika aplikasi Anda menargetkan API level 12 atau lebih rendah, maka aktivitas Anda selalu menangani perubahan konfigurasi itu sendiri (perubahan konfigurasi ini tidak memulai kembali aktivitas Anda, bahkan ketika berjalan pada perangkat Android 3.2 atau lebih tinggi). Ditambahkan di API level 13.

Jadi, dalam file AndroidManifest.xml, kita dapat meletakkan:

<activity
            android:name=".activities.role_activity.GeneralViewPagerActivity"
            android:label="@string/title_activity_general_view_pager"
            android:screenOrientation="portrait"
            android:configChanges="orientation|keyboardHidden|screenSize"
            >
        </activity> 

1

Menambahkan di <preference name="orientation" value="portrait" />bawah <widget>di config.xml saya berfungsi untuk saya.

(Solusi lain tidak berfungsi pada perangkat saya, ditimpa selama membangun atau memberikan kesalahan penghentian selama proses pembangunan.)


Di mana config.xml mengatakan? Platform pengembangan apa yang Anda maksud?
Tash Pemhiwa

1

dalam file Manifest aktivitas mana yang ingin Anda gunakan dalam "potret" Anda harus menulis kode ini dalam tag Aktivitas

  android:screenOrientation="portrait" 

seperti ini

         android:icon="@drawable/icon"
        android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity" 
        android:screenOrientation="portrait" >

tetapi jika Anda ingin layar dalam lanskap gunakan kode ini seperti ini

android:screenOrientation="landscape"

1
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //setting screen orientation locked so it will be acting as potrait
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}

0

Jika ada yang bertanya-tanya, bagaimana Anda bisa melakukan ini untuk seluruh aplikasi Anda tanpa harus membuat semua aktivitas Anda memperpanjang kelas dasar umum di Kotlin , lihat contoh di bawah ini:

class InteractiveStoryApplication: Application() {
override fun onCreate() {
    super.onCreate()
    registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
        override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
            activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
        }

        override fun onActivityPaused(activity: Activity?) {
        }

        override fun onActivityResumed(activity: Activity?) {
        }

        override fun onActivityDestroyed(activity: Activity?) {
        }

        override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
        }

        override fun onActivityStarted(activity: Activity?) {
        }

        override fun onActivityStopped(activity: Activity?) {
        }
    })
}
}

dan kemudian Anda harus menambahkan kelas dasar umum Anda di AndroidManifest seperti:

<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"

0

Anda bisa melakukannya dengan dua cara.

  1. Menambahkan android:screenOrientation="portrait" file manifes Anda ke aktivitas yang sesuai
  2. Tambahkan setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); ke aktivitas Anda dalam metode `onCreate ()

0

Mirip dengan jawaban Graham Borland ... tetapi sepertinya Anda tidak perlu membuat kelas Aplikasi jika Anda tidak mau ... buat saja Kegiatan Dasar di proyek Anda

public class BaseActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_base);
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

}

Dan perluas kelas ini daripada AppCompatActivity tempat Anda ingin menggunakan Mode Potrait

public class your_activity extends BaseActivity {}

0

Untuk Pengguna Xamarin:

Jika Anda memperluas semua aktivitas Anda ke BaseActivityJust add:

this.RequestedOrientation = ScreenOrientation.Portrait;

Ini akan menyelesaikan masalah. Jika Anda ingin aktivitas tertentu berada di lanskap, abaikan ini dalam OnActivityCreated. Sebagai:

this.Activity.RequestedOrientation = ScreenOrientation.Landscape;

-11

Dalam Manifest Anda ketik ini:

<activity
    android:screenOrientation="portrait"
    <!--- Rest of your application information ---!>
</activity>

6
Ini tidak menambahkan sesuatu yang baru yang belum dijawab jawaban 3 tahun. Anda mungkin mempertimbangkan untuk menghapusnya. Jika Anda memutuskan untuk mengedit jawaban Anda untuk memasukkan lebih banyak informasi yang membedakan jawaban Anda dari orang lain, silakan @membalas kepada saya.
Artjom B.

1
android: screenOrientation = "portrait" tidak dapat ditambahkan ke tag aplikasi, itu harus masuk ke dalam tag aktivitas
Hossein Amini
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.