Ответы:
Вы можете указать android:screenOrientation="portrait"
для каждого действия в вашем файле manifest.xml. Вы не можете указать эту опцию в application
теге.
Другой вариант - сделать это программно, например, в Activity
базовом классе:
@Override
public void onCreate(Bundle savedInstanceState) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
Последний вариант - сделать это со слушателями жизненного цикла активности, которые доступны только с Android 4.0 (API 14+). Все происходит в пользовательском Application
классе:
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleAdapter() {
@Override
public void onActivityCreated(Activity a, Bundle savedInstanceState) {
a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
});
}
ActivityLifecycleAdapter
это просто вспомогательный класс, который вам нужно создать, который будет пустой реализацией ActivityLifecycleCallbacks
(поэтому вам не нужно переопределять все методы этого интерфейса, когда вам просто нужен один из них).
Да, вы можете делать это как программно, так и для всех ваших действий, создавая AbstractActivity, который расширяет все ваши действия.
public abstract class AbstractActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
}
Эта абстрактная деятельность также может быть использована для глобального меню.
ActivityInfo.SCREEN_ORIENTATION_NOSENSOR
должен быть лучший ответ, потому что он предназначен для того, чтобы оставить устройство в состоянии по умолчанию, потому что некоторые устройства не имеют книжной ориентации. Однако «nosensor» НЕ работает для меня, поэтому ответ @ arcone означает меня.
Вы можете сделать это для всего приложения, не заставляя все ваши действия расширять общий базовый класс.
Сначала нужно убедиться, что вы включили Application
подкласс в свой проект. В своей программе onCreate()
, которая вызывается при первом запуске приложения, вы регистрируете ActivityLifecycleCallbacks
объект (уровень API 14+) для получения уведомлений о событиях жизненного цикла активности.
Это дает вам возможность выполнять свой собственный код всякий раз, когда какая-либо активность в вашем приложении запускается (или останавливается, или возобновляется, или как угодно). На данный момент вы можете позвонить setRequestedOrientation()
на вновь созданную деятельность.
class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
// register to be informed of activities starting up
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity,
Bundle savedInstanceState) {
// new activity created; force its orientation to portrait
activity.setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
....
});
}
}
Вы можете установить это в своем файле манифеста ..
android:name=".your launching activity name"
android:screenOrientation="portrait"
и вы также можете добиться того же, написав код в вашем файле класса, например:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Добавьте android: screenOrientation = "Portrait" к действию в AndroidManifest.xml. Например:
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="portrait">
Использование:
android:screenOrientation="portrait"
Просто напишите эту строку в файле манифеста вашего приложения в каждом упражнении, которое вы хотите показывать только в портретном режиме.
Как из руководства разработчика Android:
«Ориентация» Ориентация экрана изменилась - пользователь повернул устройство. Примечание. Если ваше приложение предназначено для уровня API 13 или выше (как заявлено атрибутами minSdkVersion и targetSdkVersion), вам также следует объявить конфигурацию «screenSize», поскольку она также изменяется, когда устройство переключается между книжной и альбомной ориентациями.
"screenSize" Текущий доступный размер экрана изменился. Это представляет изменение доступного в настоящее время размера относительно текущего соотношения сторон, поэтому оно изменится, когда пользователь переключается между альбомным и портретным режимами. Однако, если ваше приложение предназначено для уровня API 12 или ниже, то ваша активность всегда сама обрабатывает это изменение конфигурации (это изменение конфигурации не перезапускает вашу активность, даже при работе на устройстве Android 3.2 или выше). Добавлено в API уровень 13.
Итак, в файле AndroidManifest.xml мы можем поместить:
<activity
android:name=".activities.role_activity.GeneralViewPagerActivity"
android:label="@string/title_activity_general_view_pager"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden|screenSize"
>
</activity>
Добавление <preference name="orientation" value="portrait" />
под <widget>
в моем config.xml работал для меня.
(Другие решения не работали на моем устройстве, были перезаписаны во время сборки или выдавали ошибки устаревания во время процесса сборки.)
В файле манифеста, какое действие вы хотите использовать в «портрете», вы должны написать этот код в теге «Деятельность».
android:screenOrientation="portrait"
как это
android:icon="@drawable/icon"
android:name="com.zemkoapps.hd.wallpaper.AndroidGridLayoutActivity"
android:screenOrientation="portrait" >
но если вы хотите экран в ландшафте, используйте этот код, как это
android:screenOrientation="landscape"
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//setting screen orientation locked so it will be acting as potrait
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
}
Если кому-то интересно, как вы могли бы сделать это для всего приложения, не заставляя все ваши действия расширять общий базовый класс в Kotlin , см. Пример ниже:
class InteractiveStoryApplication: Application() {
override fun onCreate() {
super.onCreate()
registerActivityLifecycleCallbacks(object: ActivityLifecycleCallbacks {
override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
override fun onActivityPaused(activity: Activity?) {
}
override fun onActivityResumed(activity: Activity?) {
}
override fun onActivityDestroyed(activity: Activity?) {
}
override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
}
override fun onActivityStarted(activity: Activity?) {
}
override fun onActivityStopped(activity: Activity?) {
}
})
}
}
а затем вы должны добавить свой общий базовый класс в AndroidManifest следующим образом:
<application android:allowBackup="true"
android:name=".InteractiveStoryApplication"
Аналогично ответу Грэма Борланда ... но, кажется, вам не нужно создавать класс Application, если вы не хотите ... просто создайте базовую активность в своем проекте
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
И расширить этот класс вместо AppCompatActivity, где вы хотите использовать режим Potrait.
public class your_activity extends BaseActivity {}
Для пользователей Xamarin:
Если вы расширяете все свои действия на BaseActivity
Просто добавьте:
this.RequestedOrientation = ScreenOrientation.Portrait;
Это решит проблему. Если вы хотите, чтобы какая-то конкретная деятельность была в ландшафте, переопределите это в OnActivityCreated
. Так как:
this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
В своем манифесте введите это:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>