0

Я хочу отключить изменение ориентации в приложении для Android, но я хочу, чтобы пользователь использовал свою собственную ориентацию: пейзаж для планшетов и портрет для телефонов.Как исправить ориентацию экрана на Android для разных устройств

Я пытаюсь установить «android: screenOrientation» с разными значениями, но я не могу найти подходящее значение.

Должна ли такая задача писать код Java (и какой код мне нужно написать), или это можно решить с помощью манифеста?

UPD Как и в @ намеке Pierrew, я должен создать res/layout/main.xml для раскладки по умолчанию, res/layout-land/main.xml для ландшафтной планировки и res/layout-port/main.xml для портретных. Итак, мне нужно знать, как определить все макеты в res/layout/main.xml и уточнить ориентацию в res/layout-land/main.xml и res/layout-port/main.xml.

Я думаю, что нужно объявить макет в res/layout/main.xml, и получить все свойства макета в res/layout-land/main.xml и res/layout-port/main.xml и переопределить только android:screenOrientation значения в производном макете.

Как я могу это сделать?

+1

Этот вопрос был nswered [здесь] (http://stackoverflow.com/questions/9627774/android-allow-portrait-and-landscape-for-tablets-but-force-portrait-on-phone) –

ответ

0

установка android:screenOrientation="landscape" в макете xml - это способ сделать это. Чтобы поддерживать различные устройства (планшет и телефоны), вам необходимо использовать «Размер-квалификаторы». В папке res вам нужно будет создать файл res/layout-large/main.xml для поддержки планшета. Поэтому, если вы хотите пейзаж для планшетов. В вашем res/layout-large/main.xml вы помещаете android:screenOrientation="landscape". В вашем обычном res/layout/main.xml вы можете поставить android:screenOrientation="portrait". Android автоматически определит, какое устройство пользователь использует и загружает соответствующий xml. Для получения дополнительной информации ознакомьтесь с разделом классификатора размеров в http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSizeQuali

+0

И как я могу описать макет в одном файл и описывать только различия в res/layout-large/main.xml (и что мне нужно создать для телефона?) –

+0

Если все остальное остается неизменным, вам придется копировать все внутри res/layout (по умолчанию эта папка для телефона) для res/layout-large /, а затем внести изменения в конфигурацию. Это по дизайну Android, потому что люди обычно перестраивают компоновку, чтобы убедиться, что все поместится на большом экране. – Pierrew

+0

А также, если вы используете relativelayout, все элементы пользовательского интерфейса могут быть сдвинуты, вам нужно будет убедиться, что все правильно выровнено, когда вы переключаетесь из ландшафтного режима в портретный. – Pierrew

0

Вы можете использовать небольшую логику, используя эти методы.

Boolean isTablet = (ctx.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; 

Изменение ориентации экрана программно.

ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

ActivityInfo:

http://developer.android.com/reference/android/content/pm/ActivityInfo.html

Это должно сделать трюк для вас:

import android.provider.Settings; 
public static void setAutoOrientationEnabled(ContentResolver resolver, boolean enabled){ 
    Settings.System.putInt(context.getContentResolver(), Settings.System.ACCELEROMETER_ROTATION, enabled ? 1 : 0); 
} 

Добавить разрешение на AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_SETTINGS" />