Ubah Orientasi Layar secara terprogram menggunakan Tombol


Jawaban:


216

Ya itu bisa diimplementasikan!

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ActivityInfo

http://developer.android.com/reference/android/content/pm/ActivityInfo.html

Lihat tautannya:

Button buttonSetPortrait = (Button)findViewById(R.id.setPortrait);
Button buttonSetLandscape = (Button)findViewById(R.id.setLandscape);

buttonSetPortrait.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
   }

});

buttonSetLandscape.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
   }

});

http://android-er.blogspot.in/2011/08/set-screen-orientation-programmatically.html


Terima kasih. Tetapi apakah fungsi ini perlu dijalankan pada perangkat yang di-rooting? Sepertinya tidak berfungsi di ponsel saya tetapi di tablet yang di-rooting.
Sam

Tidak, tidak seperti itu .. Sebenarnya saya menguji kode di tautan itu sebelum memposting .. Ini berfungsi di perangkat saya ..
Hariharan

oke, ya, kamu benar. Saya baru saja menguji perangkat lain dan berfungsi dengan baik. baik, Samsung Galaxy Nexus saya tidak berfungsi. Tidak tahu kenapa.
Sam

4
Terima kasih atas jawabannya. Tapi ini mengunci aplikasi dalam mode itu. Saat Pengguna memutar perangkat, layar tidak berputar.
Eco4ndly

2
Jika saya menyetel orientasi ke lanskap secara terprogram sebagai jawaban ini, pengguna tidak dapat lagi mengubah orientasi dengan memutar perangkat. Adakah cara untuk menangani masalah ini? Saya ingin melakukan apa yang diajarkan dalam jawaban ini tetapi kemudian ketika pengguna memutar perangkat itu akan terus mengubah orientasi.
Segera Santos

36

Ya, Anda dapat menyetel orientasi layar secara terprogram kapan pun Anda mau menggunakan:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

untuk mode lanskap dan potret. Metode setRequestedOrientation () tersedia untuk kelas Activity , sehingga bisa digunakan di dalam Activity Anda.

Dan inilah cara Anda mendapatkan orientasi layar saat ini dan mengaturnya secara memadai bergantung pada statusnya saat ini:

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
final int orientation = display.getOrientation(); 
 // OR: orientation = getRequestedOrientation(); // inside an Activity

// set the screen orientation on button click
Button btn = (Button) findViewById(R.id.yourbutton);
btn.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {

              switch(orientation) {
                   case Configuration.ORIENTATION_PORTRAIT:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                       break;
                   case Configuration.ORIENTATION_LANDSCAPE:
                       setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                       break;                   
               }
          }
   });

Diambil dari sini: http://techblogon.com/android-screen-orientation-change-rotation-example/

EDIT

Selain itu, Anda bisa mendapatkan orientasi layar menggunakan Configuration:

Activity.getResources().getConfiguration().orientation

3
Saya sarankan menggunakan getRequestedOrientation()untuk mendapatkan orientasi layar saat ini: stackoverflow.com/a/21909327/1037294
a.ch.

getRequestedOrientation()memberi Anda UNSPECIFIEDsaat Anda memulai aplikasi. Jadi dengan pendengar di atas itu tidak akan mengubah layar dan jika Anda menambahkan UNSPECIFIEDke switchitu harus menempatkan layar di salah satu Portrait / Landscape posisi pertama.
mortalis

22

Jika memungkinkan, jangan gunakan SCREEN_ORIENTATION_LANDSCAPE atau SCREEN_ORIENTATION_PORTRAIT. Sebagai gantinya gunakan:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

Ini memungkinkan pengguna untuk mengarahkan perangkat ke salah satu orientasi lanskap, atau salah satu orientasi potret. Jika Anda pernah bermain game dengan kabel pengisi daya didorong ke perut Anda, maka Anda tahu persis mengapa memiliki kedua orientasi tersedia penting bagi pengguna.

Catatan: Untuk ponsel, setidaknya beberapa yang saya periksa, ini hanya memungkinkan mode potret "sisi kanan atas", namun SENSOR_PORTRAIT berfungsi dengan baik di tablet.

Catatan: fitur ini diperkenalkan di API Level 9, jadi jika Anda harus mendukung 8 atau lebih rendah (sepertinya tidak pada saat ini), gunakan:

setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(Build.VERSION.SDK_INT < 9 ?
                        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT :
                        ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);

19

Gunakan ini untuk mengatur orientasi layar:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

atau

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

dan jangan lupa untuk menambahkan ini ke manifes Anda:

android:configChanges = "orientation"

2
Anda membutuhkan keduanya "orientation|screenSize", Lihat di sini: developer.android.com/guide/topics/resources/…
Benny

7

Kode yang berfungsi:

private void changeScreenOrientation() {
    int orientation = yourActivityName.this.getResources().getConfiguration().orientation;
    if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        showMediaDescription();
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        hideMediaDescription();
    }
    if (Settings.System.getInt(getContentResolver(),
            Settings.System.ACCELEROMETER_ROTATION, 0) == 1) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
            }
        }, 4000);
    }
}

panggil metode ini di klik tombol Anda

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.