Zmień orientację ekranu programowo za pomocą przycisku


Odpowiedzi:


216

Tak, jest wykonalne!

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

Skorzystaj z linku:

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


Dzięki. Ale czy ta funkcja musi być uruchomiona na zrootowanym urządzeniu? Wygląda na to, że nie działa na moim telefonie komórkowym, ale na moim zrootowanym tablecie.
— Sam

Nie, to nie tak .. Właściwie przetestowałem kod w tym linku przed wysłaniem .. Działał na moim urządzeniu ..
— Hariharan

ok, tak, masz rację. właśnie przetestowałem inne urządzenie i działa dobrze. cóż, mój Samsung Galaxy Nexus nie działa. Nie wiem dlaczego.
— Sam

4
Dziękuję za odpowiedź. Ale to blokowanie aplikacji w tym trybie. Gdy użytkownik obraca urządzenie, ekran się nie obraca.
— Eco4ndly

2
Jeśli ustawię orientację na poziomą programowo, tak jak ta odpowiedź, użytkownik nie będzie już mógł zmienić orientacji, obracając urządzenie. Jakiś sposób na rozwiązanie tego problemu? Chcę zrobić to, czego nauczono w tej odpowiedzi, ale kiedy użytkownik obróci urządzenie, będzie on ciągle zmieniać orientację.
— Wkrótce Santos

36

Tak, możesz ustawić orientację ekranu programowo w dowolnym momencie, używając:

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

odpowiednio dla trybu poziomego i pionowego. Metoda setRequestedOrientation () jest dostępna dla klasy Activity , więc może być używana wewnątrz Twojego Activity.

I tak można uzyskać aktualną orientację ekranu i ustawić ją odpowiednio w zależności od jego aktualnego stanu:

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

Zaczerpnięte stąd: http://techblogon.com/android-screen-orientation-change-rotation-example/

EDYTOWAĆ

Możesz także uzyskać orientację ekranu za pomocą Configuration:

Activity.getResources().getConfiguration().orientation

3
Sugeruję użycie getRequestedOrientation()do uzyskania aktualnej orientacji ekranu: stackoverflow.com/a/21909327/1037294
— a.ch.

getRequestedOrientation()wyświetla się UNSPECIFIEDpo uruchomieniu aplikacji. Tak więc z powyższym słuchaczem nie zmieni ekranu, a jeśli dodasz UNSPECIFIEDdo switchniego, powinien najpierw ustawić ekran w jednej z pozycji pionowej / poziomej .
— mortalis

22

O ile to możliwe, nie używaj SCREEN_ORIENTATION_LANDSCAPE ani SCREEN_ORIENTATION_PORTRAIT. Zamiast tego użyj:

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

Umożliwiają one użytkownikowi ustawienie urządzenia odpowiednio w orientacji poziomej lub pionowej. Jeśli kiedykolwiek musiałeś grać w grę z kablem ładującym wbitym w żołądek, wiesz dokładnie, dlaczego dostępność obu orientacji jest ważna dla użytkownika.

Uwaga: co najmniej kilka telefonów, które sprawdziłem, zezwala tylko na tryb pionowy „prawą stroną do góry”, jednak SENSOR_PORTRAIT działa poprawnie na tabletach.

Uwaga: ta funkcja została wprowadzona na poziomie API 9, więc jeśli musisz obsługiwać 8 lub niższą wersję (mało prawdopodobne w tym momencie), zamiast tego użyj:

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

Użyj tego, aby ustawić orientację ekranu:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

lub

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

i nie zapomnij dodać tego do swojego manifestu:

android:configChanges = "orientation"

2
Potrzebujesz obu "orientation|screenSize", spójrz tutaj: developer.android.com/guide/topics/resources/ ...
— Benny

7

Działający 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);
    }
}

wywołaj tę metodę za pomocą kliknięcia przycisku

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.