У меня есть экран регистрации, в котором пользователь вводит все регистрационные данные, и когда пользователь нажимает кнопку "Регистрация", я показываю индикатор выполнения (индикатор выполнения начинает вращаться), а затем выводит пользователя на главный экран. Если пользователь поворачивает телефон, когда индикатор выполнения вращается, индикатор выполнения отклоняется. Я хочу, чтобы ориентация не изменялась от пористого до пейзажа, и наоборот, когда индикатор выполнения видится (что означает, что он вращается). Как остановить изменение ориентации когда индикатор прогресса вращается? Любая помощь будет оценена.
Как остановить изменение ориентации, когда индикатор прогресса вращается в андроиде
Ответ 1
Это происходит потому, что, когда ориентация экрана вращается, активность снова запускается. В этом случае вы можете добавить атрибут configChanges
в свой тег в файле AndroidManifest, чтобы остановить повторное создание Activity.
<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);
}
}
Ответ 2
Как описано здесь, вызывая
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
а затем
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
действительно работает как шарм... на реальных устройствах!
Не думайте, что это сломано при тестировании на эмуляторе, клавиша ctrl + F11 ВСЕГДА меняет ориентацию экрана, не двигая имитирующие датчики.
Некоторые другие ссылки:
И вот Activityinfo
***************** Отредактировано ***************************** ***
И я думаю, что вы не можете обрабатывать progressbar при вращении экрана. Я прав?
Поэтому вам не нужно останавливать вращение для этого решения. Вы должны обработать индикатор выполнения. Вот несколько учебных пособий, которые полезны для этой цели.
- Как обрабатывать изменение ориентации экрана, когда диалог выполнения и фоновый поток активны?
- Обработка диалогов прогресса и изменений ориентации
- Диалоги потоков и хода в поворотах ориентации экрана Android
- Android Persistent ProgressDialog Сделано правильно
************** Отредактировано 2 *****************
И некоторое время, когда вы теряете данные при изменении ориентации. Таким образом, вы можете попробовать эти учебные пособия
Ответ 3
использовать метод 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);
}
}