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



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



есть ли способ сказать это действие "не поворачивайте экран, даже если пользователь трясет свой телефон, как сумасшедший"?

608   13  

13 ответов:

добавить

android:screenOrientation="portrait" 

или

 android:screenOrientation="landscape" 

до <activity> элемент / s внутри манифест и все готово.

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

  1. сохранить текущую ориентацию экрана внутри вашей деятельности с помощью getRequestedOrientation().
  2. отключить автоматическую ориентацию экрана с помощью setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR).
  3. выполнить/выполнить ваш AsyncTask.
  4. в конце AsyncTask восстановление предыдущего состояния ориентации с помощью setRequestedOrientation(oldOrientation).

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

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

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

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

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

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

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);
}

активности.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>

вместо того, чтобы идти в 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 и выше. Так что в основном это наконечник копья.

следующий атрибут активности в AndroidManifest.XML-это все, что вам нужно:

android:configChanges="orientation"

Итак, полный узел активности будет:

<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>

добавить:

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

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

вы должны добавить следующий код в манифесте.XML-файл. Действие, для которого оно не должно вращаться, в этом действии добавьте этот элемент

android:screenOrientation="portrait"

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

вы можете попробовать этот способ

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.itclanbd.spaceusers">

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".Login_Activity"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

добавьте следующее К вашему AndroidManifest.xml

[ app > src > main > AndroidManifest.xml ]

<activity android:name=".MainActivity"
          android:configChanges="orientation"
          android:screenOrientation="portrait"/>

пример:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="xxx.zzzzzz.yyyyy">

   <uses-permission android:name="A-PERMISSION" />

   <application>
      <activity android:name=".MainActivity"
                android:screenOrientation="portrait"
                android:configChanges="orientation">
      </activity>
   </application>

</manifest>

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

Comments

    Ничего не найдено.