Bir Düğme kullanarak programlı olarak Ekran Yönünü değiştirin


Yanıtlar:


216

Evet uygulanabilir!

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

Bağlantıya bakın:

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


Teşekkürler. Ancak bu işlev köklü bir cihazda çalıştırılması gereken bir işlev mi? Görünüşe göre cep telefonumda değil, köklü tabletimde çalışıyor.
Sam

Hayır öyle değil .. Aslında göndermeden önce o linkteki kodu test ettim .. Cihazımda çalışıyordu ..
Hariharan

tamam, evet, haklısın. Az önce başka bir cihazı test ettim ve iyi çalışıyor. Peki, Samsung Galaxy Nexus'um çalışmıyor. Neden bilmiyorum.
Sam

4
Cevap için teşekkürler. Ancak bu, uygulamayı bu modda kilitler. Kullanıcı cihazı döndürürken ekran dönmüyor.
Eco4ndly

2
Yönlendirmeyi bu yanıt olarak programlı olarak yatay olarak ayarlarsam, kullanıcı artık cihazı döndürerek yönlendirmeyi değiştiremez. Bu sorunu çözmenin bir yolu var mı? Bu cevapta öğretileni yapmak istiyorum ama daha sonra kullanıcı cihazı döndürdüğünde yönünü değiştirmeye devam edecek.
Yakında Santos

36

Evet, aşağıdakileri kullanarak istediğiniz zaman ekran yönünü programlı olarak ayarlayabilirsiniz :

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

sırasıyla yatay ve portre modu için. SetRequestedOrientation () yöntemi Activity sınıfı için mevcuttur , bu nedenle Aktivitenizin içinde kullanılabilir.

Ve mevcut ekran yönünü şu şekilde elde edebilir ve mevcut durumuna bağlı olarak uygun şekilde ayarlayabilirsiniz:

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

Buradan alınmıştır: http://techblogon.com/android-screen-orientation-change-rotation-example/

DÜZENLE

Ayrıca, aşağıdakileri kullanarak ekran yönünü elde edebilirsiniz Configuration:

Activity.getResources().getConfiguration().orientation

3
getRequestedOrientation()Şu anki ekran yönünü almak için kullanmanızı öneririm : stackoverflow.com/a/21909327/1037294
a.ch.

getRequestedOrientation()UNSPECIFIEDuygulamayı başlattığınızda size verir . Yani yukarıdaki dinleyici ile bu ekranı değişmeyecek ve eklerseniz UNSPECIFIEDiçin switcho birinde ekranını koymalıyız dikey / yatay birinci konumda.
mortalis

22

Mümkün olan her yerde, lütfen SCREEN_ORIENTATION_LANDSCAPE veya SCREEN_ORIENTATION_PORTRAIT kullanmayın. Bunun yerine şunu kullanın:

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

Bunlar, kullanıcının cihazı sırasıyla yatay veya dikey yöne yönlendirmesine olanak tanır. Şimdiye kadar karnınıza takılan bir şarj kablosuyla bir oyun oynamak zorunda kaldıysanız, o zaman her iki yöne de sahip olmanın kullanıcı için neden önemli olduğunu tam olarak bilirsiniz.

Not: Telefonlar için, en azından kontrol ettiğim birkaçı, yalnızca "sağ taraf yukarı" dikey moduna izin veriyor, ancak SENSOR_PORTRAIT tabletlerde düzgün çalışıyor.

Not: Bu özellik API Seviye 9'da tanıtıldı, bu nedenle 8 veya daha düşük seviyeyi desteklemeniz gerekiyorsa (bu noktada olası değildir), bunun yerine şunu kullanın:

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

Ekranın yönünü ayarlamak için bunu kullanın:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

veya

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

ve bunu bildiriminize eklemeyi unutmayın:

android:configChanges = "orientation"

2
İkisine de ihtiyacınız var "orientation|screenSize", Buraya bakın: developer.android.com/guide/topics/resources/…
Benny

7

Çalışan bir kod:

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

bu yöntemi düğme tıklamanızda arayın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.