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

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

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

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

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

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

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


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

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

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

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

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

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

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

<activity
            ...
            ...
            android:screenOrientation="portrait">
+21
23 авг. '13 в 4: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 в 12: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
09 июл. '14 в 23: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 в 2: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
17 июл. '13 в 22:50
источник

Добавить

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

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

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

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

android:screenOrientation="portrait"

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

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

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