Портрет для телефона, пейзаж для планшета (Android-Layout) - PullRequest
22 голосов
/ 06 октября 2011

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

Таблетки: Пейзаж Телефоны: Портрет

Комувыразись более технически.

У меня есть макет в "res / layout-xlarge-land" для ландшафтного дизайна на планшете, и у меня есть оригинальный макет в "res / layout", и я просто хочу явно использовать layout-xlarge-land дляпланшет.Ничего другого, по существу, ТОЛЬКО используя ландшафт для устройств xlarge.

Спасибо!

Ответы [ 4 ]

42 голосов
/ 24 ноября 2011

Установка определенной ориентации на основе плотности устройства может не работать, потому что есть телефоны с более высокой плотностью, чем планшеты.

Что я сделал, так это отключил датчик ориентации устройства, установив атрибут в теге активности вфайл манифеста выглядит так:

android:screenOrientation="nosensor"

При запуске приложения по умолчанию для телефонов устанавливается альбомная ориентация, а для планшетов - альбомная (и, следовательно, он выбирает xml-файл из layout-xlarge-land).И поскольку вы установили блокировку ориентации, она остается в этой ориентации.

2 голосов
/ 16 декабря 2013

Вы можете измерить фактический размер (в дюймах) устройства, а затем программно установить ориентацию, используя:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

или

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Чтобы получить физический размерНа устройстве вы можете использовать код, опубликованный здесь .

Это не на 100% точно, но достаточно для определения того, на каком устройстве работает приложение.

0 голосов
/ 21 декабря 2013

установить макет с именем llTablet в меню макета в макетах папок «layout-large» и макет llPhone в меню макетов в папке «макет». По меню я ссылаюсь на первый макет, который вводит пользователь. Затем проверьте, можете ли вы ссылаться на него. Если вы не можете сослаться на llPhone, тогда это планшет.

llPhone = (LinearLayout) findViewById (R.id.llPhone)
if (llPhone == null) {
 tablet = true;
}
else {
 tablet = false;
}
0 голосов
/ 06 октября 2011

Я не совсем уверен, что вы говорите, но может показаться, что вы должны просто измерить разрешение и действовать соответственно. Я имею в виду, откуда вы знаете, что это телефон или планшет ДРУГОЕ, а разрешение отличается?

...