Предотвращение поворота экрана на Android

У меня есть один из моих действий, который я хотел бы предотвратить от поворота, потому что я запускаю AsyncTask, а поворот экрана заставляет его перезагрузиться.

Есть ли способ рассказать об этом мероприятии "НЕ ПОВТОРИТЕ экран, даже если пользователь трясет свой телефон, как сумасшедший"?

247
28 апр. '10 в 18:25
источник поделиться
10 ответов

Добавьте android:screenOrientation="portrait" в элемент <activity>/s в манифест или landscape, и все готово.

353
28 апр. '10 в 18:29
источник

Связанные вопросы


Похожие вопросы

Вы можете следовать приведенной ниже логике, чтобы предотвратить автоматический поворот экрана во время работы AsyncTask:

Обратите внимание, что существует несколько способов доступа к Activity (который работает по свойствам пользовательского интерфейса) внутри AsyncTask. Вы можете реализовать свой AsyncTask как внутренний класс, или вы можете использовать сообщение Handler, которые вызывают ваш класс Activiy.

114
03 февр. '12 в 6:49
источник

В вашем файле манифеста для каждого действия, которое вы хотите заблокировать вращение экрана, добавьте: если вы хотите заблокировать его в горизонтальном режиме:

<activity
        ...
        ...
        android:screenOrientation="landscape">

или если вы хотите заблокировать его в вертикальном режиме:

<activity
            ...
            ...
            android:screenOrientation="portrait">
21
23 авг. '13 в 7:41
источник

Самый простой способ, которым я нашел это, - поставить

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

внутри onCreate, сразу после

setContentView(R.layout.activity_main);

так...

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
14
18 июня '14 в 15:55
источник

Вместо входа в AndroidManifest вы можете просто сделать это:

screenOrientation = getResources().getConfiguration().orientation;
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
... AsyncTask

screenOrientation = getResources().getConfiguration().orientation;


@Override
protected void onPostExecute(String things) {
    context.setRequestedOrientation(PlayListFragment.screenOrientation);
    or 
    context.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
}

Единственным недостатком здесь является то, что для него требуется уровень API 18 или выше. Так что в основном это кончик копья.

5
10 июля '14 в 2:56
источник

Activity.java

@Override     
 public void onConfigurationChanged(Configuration newConfig) {       
        try {     
            super.onConfigurationChanged(newConfig);      
            if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {      
                // land      
            } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {      
               // port       
            }    
        } catch (Exception ex) {       
     }   

AndroidManifest.xml

 <application android:icon="@drawable/icon" android:label="@string/app_name">
  <activity android:name="QRCodeActivity" android:label="@string/app_name"
  android:screenOrientation="landscape" >
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
   </intent-filter>
  </activity>

 </application>
5
23 окт. '12 в 5:59
источник

В ACManITY в AndroidManifest.xml присутствует следующий атрибут:

android:configChanges="orientation"

Итак, полная активность node будет:

<activity android:name="Activity1"
          android:icon="@drawable/icon"
          android:label="App Name"
          android:excludeFromRecents="true"
          android:configChanges="orientation">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>
2
18 июля '13 в 1:50
источник

Добавить

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
        ...
        ...
        ...
}
1
25 дек. '14 в 12:13
источник

Если вы используете Android Developer Tools (ADT) и Eclipse вы можете перейти на вкладку AndroidManifest.xml → Application → вниз и выбрать свою активность. Наконец, выберите предпочтительную ориентацию. Вы можете выбрать один из многих вариантов.

0
21 окт. '13 в 16:32
источник

Вы должны добавить следующий код в файл manifest.xml. Активность, для которой он не должен вращаться, в этой активности добавляет этот элемент

android:screenOrientation="portrait"

Затем он не будет вращаться.

0
10 июля '14 в 15:09
источник

Посмотрите другие вопросы по меткам или Задайте вопрос