Портрет для телефона, пейзаж для планшета (Android-Layout)

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

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

говоря более техническим.

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

спасибо!

4 ответов


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

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

android:screenOrientation="nosensor"

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


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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

или

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

это не 100% точно, но это достаточно хорошо, чтобы решить, что король устройства работает приложение.


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


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

llPhone = (LinearLayout) findViewById (R.id.llPhone)
if (llPhone == null) {
 tablet = true;
}
else {
 tablet = false;
}