Відповіді:
Ви можете вказати 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 = "портрет" до активності в 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 або новішої версії). Додано в рівень 13 API.
Отже, у файл 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 працював для мене.
(Інші рішення або не працювали на моєму пристрої, були перезаписані під час будівництва або давали помилки депресації під час збирання.)
у файлі Manifest, яку діяльність ви хочете використовувати в "портреті", ви повинні записати цей код у тег "Активність"
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);
}
Якщо хтось цікавився, як ви могли це зробити для всієї своєї програми, не змушуючи всіх видів діяльності розповсюджувати загальний базовий клас у Котліні , дивіться приклад нижче:
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"
Подібно до відповіді Грем Борланд ... але, здається, вам не потрібно створювати клас додатків, якщо ви не хочете ... просто створіть базову діяльність у своєму проекті
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 там, де ви хочете використовувати режим Po Portrait
public class your_activity extends BaseActivity {}
Для користувачів Xamarin:
Якщо ви поширюєте всю свою діяльність на BaseActivityдодавання Just:
this.RequestedOrientation = ScreenOrientation.Portrait;
Це вирішить проблему. Якщо ви хочете, щоб якась конкретна діяльність була в ландшафті, замініть це OnActivityCreated. Як:
this.Activity.RequestedOrientation = ScreenOrientation.Landscape;
У своєму Маніфесті введіть це:
<activity
android:screenOrientation="portrait"
<!--- Rest of your application information ---!>
</activity>