Как перестать менять ориентацию при вращении индикатора выполнения в Android - PullRequest
14 голосов
/ 13 октября 2011

У меня есть экран регистрации, где пользователь вводит все регистрационные данные, и когда пользователь нажимает кнопку «Зарегистрироваться», я показываю индикатор выполнения (индикатор выполнения начинает вращаться), а затем переносит пользователя на главный экран. Пользователь поворачивает телефон, когда индикатор выполнения вращается, индикатор выполнения отклоняется. Я хочу, чтобы ориентация не менялась с портретной на ландшафтную и наоборот, когда индикатор выполнения виден (то есть вращается). Как остановить изменение ориентации когда индикатор выполнения вращается? Любая помощь будет оценена.

Ответы [ 3 ]

14 голосов
/ 13 октября 2011

Это происходит потому, что при повороте ориентации экрана действие перезапускается. В этом случае вы можете добавить атрибут configChanges в свой тег в файле AndroidManifest, чтобы остановить повторное создание действия.

<activity android:name=".Activity_name"
          android:configChanges="orientation|keyboardHidden">

Таким образом, ваша ориентация может измениться, если индикатор выполнения будет работать, а также не остановится, если ориентация изменится.

UPDATE

@Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
            setContentView(R.layout.login_landscape);
        }
        else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
            setContentView(R.layout.login);         
        }
    }
9 голосов
/ 13 октября 2011

Как объяснено здесь , вызов

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

, а затем

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

действительно работает как очарование ... на реальных устройствах!

Не думайте, что он сломался при тестировании на эмуляторе, сочетание клавиш ctrl + F11 ВСЕГДА изменяет ориентацию экрана, не имитируя движения датчиков.

Некоторые другие ссылки:

  1. Программируемое включение / отключение поворота экрана в Android
  2. Блокировка дочерней активности и ориентации Android

А вот Activityinfo

***************** Отредактировано ********************************

И я думаю, что вы не можете справиться с прогрессбаром при повороте экрана. Я прав?

Так что вам не нужно останавливать вращение для этого решения.Вы должны обрабатывать индикатор выполнения.Вот несколько уроков, которые полезны для этой цели ..

  1. Как справиться с изменением ориентации экрана при активном диалоге прогресса и фоновом потоке?
  2. Обработка диалогов прогресса и изменений ориентации
  3. Потоки и диалоги прогресса в поворотах ориентации экрана Android
  4. Постоянный Android-диалог прогресса Выполнено правильно

************** Отредактировано 2 *****************

И когда-нибудь вытеряет данные при изменении ориентации.Поэтому вы можете попробовать эти уроки

  1. Обработка изменений времени выполнения
  2. Более быстрое изменение ориентации экрана
  3. ОбработкаИзменение ориентации в Android
2 голосов
/ 13 октября 2011

используйте метод setRequestOrientation в классе Activity.

Наследуйте класс ProgressDialog и переопределяйте методы.
Пример кода ниже.

    class myDialog extends ProgressDialog
{
    Activity mActivity;
    public myDialog(Activity context) {
        super(context);
        this.mActivity = context;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
    }

    @Override
    public void dismiss() {            
        super.dismiss();
        mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...