Программно изменить ориентацию экрана с помощью кнопки
Я думаю, что это осуществимо, так как поведение вращения экрана может подняться до уровня приложения.
5 ответов
Да, это выполнимо!
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
см. ссылка:
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
Да, вы можете настройка ориентации экрана программно в любое время вы хотите, используя:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
для ландшафтного и портретного режима соответственно. В setRequestedOrientation() метод доступно для класса Activity, поэтому его можно использовать внутри вашей деятельности.
и вот как вы можете получить текущую ориентацию экрана и установите его адекватно в зависимости от его текущего состояния:
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;                   
               }
          }
   });
Взято отсюда: http://techblogon.com/android-screen-orientation-change-rotation-example/
редактировать
кроме того, вы можете получить ориентацию экрана с помощью Configuration:
Activity.getResources().getConfiguration().orientation
по возможности не используйте SCREEN_ORIENTATION_LANDSCAPE или SCREEN_ORIENTATION_PORTRAIT. Вместо этого используйте:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
Они позволяют пользователю ориентировать устройство либо на альбомную ориентацию, либо на портретную ориентацию, соответственно. Если вам когда-либо приходилось играть в игру с зарядным кабелем, загоняемым в ваш желудок, вы точно знаете, почему наличие обеих ориентаций важно для пользователя.
Примечание: для телефонов, по крайней мере, несколько что я проверил, он позволяет только" правой стороной вверх " портретный режим, однако, SENSOR_PORTRAIT работает правильно на планшетах.
Примечание: эта функция была введена на уровне API 9, поэтому, если вы должны поддерживать 8 или ниже (маловероятно на данный момент), вместо этого используйте:
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);
использовать это, чтобы установить ориентацию экрана:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
или
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
и не забудьте добавить в манифест:
android:configChanges = "orientation"
рабочий код:
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);
    }
}
вызовите этот метод в кнопке click
