Активность не принимает правильную ориентацию

Для моего приложения мне нужно исправить портретную ориентацию на телефонах и разрешить книжную и альбомную ориентацию на планшетах. Я просмотрел ответы здесь но я хочу попробовать сделать то же самое, используя только xml. Я попытался добавить следующую строку в свой манифест

<activity
android:theme="@style/Theme.ActionBarLargeTitle"
android:name="com.work.activities.MyActivity"
android:screenOrientation="@integer/orientation_supported"
android:exported = "false"/>

В res/values/dimens.xml я добавил следующую строку (1 соответствует портрету)

<integer name="orientation_supported">1</integer>

Я создал еще один файл, res/values-sw600dp/dimens.xml, в который я добавил (-1 соответствует неуказанному)

<integer name="orientation_supported">-1</integer>

На телефоне этот код работает нормально, и активность всегда в портретном режиме. На планшете Nexus 10 дюймов (ширина 800 dp) это не удается, и оно исправлено в портретном режиме. Что-то не так с этим подходом?

EDIT: я проверял различные значения, и во всех случаях (на всех устройствах) выбирается значение из res/values/dimens.xml. Если это значение отсутствует, при установке приложения возникает ошибка «Ошибка установки: INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION».


person Yagna    schedule 30.05.2013    source источник
comment
добавили ли вы экраны поддержки в манифест developer.android.com/guide /темы/манифест/   -  person Raghunandan    schedule 30.05.2013
comment
также проверьте это. developer.android.com/guide/practices/screens_support.html. я не понимаю, что вы делаете с res/values-sw600dp/dimens.xml. В документе упоминается, что вам необходимо предоставить различные чертежи и макеты.   -  person Raghunandan    schedule 30.05.2013
comment
Нет необходимости иметь разные макеты во всех случаях. Мой пользовательский интерфейс имеет одинаковый макет на планшете и телефоне, но с разными размерами.   -  person Yagna    schedule 30.05.2013
comment
Вы проверили ссылку, которую я разместил в комментарии. Я думаю, вы неправильно поняли. Пожалуйста, проверьте ссылку для ясности. Прочтите внимательно   -  person Raghunandan    schedule 30.05.2013
comment
проверьте это res/layout/main_activity.xml # Для телефонов res/layout-sw600dp/main_activity.xml # Для планшетов. У вас должны быть разные макеты в документе. Также проверьте эту ссылку youtube.com/watch?v=amZM8oZBgfk.   -  person Raghunandan    schedule 30.05.2013


Ответы (2)


Проблема в том, что вы используете квалификатор -sw600dp, который на самом деле не проверяет ориентацию, а скорее проверяет, что самая короткая сторона составляет не менее 600 dp. Вместо этого попробуйте использовать квалификаторы -land или -port.

person Karakuri    schedule 30.05.2013

Здесь возможны две проблемы:

  • Убедитесь, что ваш планшет читает из папки -sw600dp. Я знаю, что это может показаться странным для устройства 800dp. Самый простой способ проверить это добавить строку с одним и тем же ключом в обе папки и отобразить в TextView.
  • Убедитесь, что ваш планшет понимает значение -1. Телефон, с которым я проверял, сделал это. Попробуйте изменить на 0 и посмотрите, не заставит ли это ландшафт.
person MaciejGórski    schedule 30.05.2013
comment
Планшет читает строки из -sw600dp. Также планшет правильно понимает значение '-1'. - person Yagna; 30.05.2013