Ответ 1
Добавьте android:screenOrientation="portrait"
в элемент <activity>
/s в
манифест или landscape
, и все готово.
У меня есть один из моих действий, который я хотел бы предотвратить от поворота, потому что я запускаю AsyncTask, а поворот экрана заставляет его перезагрузиться.
Есть ли способ рассказать об этом мероприятии "НЕ ПОВТОРИТЕ экран, даже если пользователь трясет свой телефон, как сумасшедший"?
Добавьте android:screenOrientation="portrait"
в элемент <activity>
/s в
манифест или landscape
, и все готово.
Вы можете следовать приведенной ниже логике, чтобы предотвратить автоматический поворот экрана во время работы AsyncTask
:
getRequestedOrientation()
.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR)
.AsyncTask
.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);
}
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>
Вместо входа в 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 или выше. Так что в основном это кончик копья.
В 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>
Добавить
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
...
...
...
}
Если вы используете Android Developer Tools (ADT) и Eclipse вы можете перейти на вкладку AndroidManifest.xml → Application → вниз и выбрать свою активность. Наконец, выберите предпочтительную ориентацию. Вы можете выбрать один из многих вариантов.
Вы должны добавить следующий код в файл manifest.xml. Активность, для которой он не должен вращаться, в этой активности добавляет этот элемент
android:screenOrientation="portrait"
Затем он не будет вращаться.