2013-08-16 17 views

Odpowiedz

133

Tak, można to zrealizować!

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

Skierować Link:

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

+0

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

+0

Nie, to nie tak. Właściwie testowałem kod w tym linku przed wysłaniem. To działało w moim urządzeniu .. – Hariharan

+0

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

24

Tak, można ustawić orientację ekranu programowo kiedy tylko chcesz przy użyciu:

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

dla orientacją pionową i poziomą odpowiednio. Metoda setRequestedOrientation() jest dostępna dla klasy aktywności, dzięki czemu można jej używać wewnątrz aktywności.

A to w jaki sposób można uzyskać bieżącej orientacji ekranu i ustawić ją adekwatnie 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;     
       } 
      } 
    }); 

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

EDIT

także można uzyskać orientację ekranu za pomocą funkcji: Configuration:

+2

Proponuję użyć 'getRequestedOrientation()', aby uzyskać bieżącą orientację ekranu: http://stackoverflow.com/a/21909327/1037294 –

+0

Wyczerpująca odpowiedź. – pdegand59

14

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

lub

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

i nie zapomnij dodać go do manifestu:

android:configChanges = "orientation" 
+2

Potrzebujesz zarówno "orientacji | screenSize" ', zobacz tutaj: https://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange – Benny

+0

api 27, jest błędny, nie używaj manifestu opcja – Mike

12

w miarę możliwości , proszę nie używać SCREEN_ORIENTATION_LANDSCAPE lub SCREEN_ORIENTATION_PORTRAIT. Zamiast tego użyj:

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

Umożliwia to użytkownikowi orientację urządzenia odpowiednio do orientacji poziomej lub orientacji pionowej. Jeśli kiedykolwiek musiałeś zagrać w grę z wbijanym kablem do ładowania, to wiesz dokładnie, dlaczego posiadanie obu dostępnych orientacji jest ważne dla użytkownika.

Uwaga: w przypadku telefonów, przynajmniej kilku, które sprawdziłem, umożliwia on tylko tryb portretowy "prawą stroną do góry", jednak funkcja SENSOR_PORTRAIT działa poprawnie na tabletach.

Uwaga: Ta funkcja została wprowadzona w API poziom 9, więc jeśli trzeba obsługiwać 8 lub niższy (mało prawdopodobne w tym momencie), a następnie zamiast używać:

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); 
Powiązane problemy