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

Hariharan
sumber
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
Philipp Jahoda
sumber
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);
Paul
sumber
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"
Sathya
sumber
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

Liya
sumber