Портрет для телефона, пейзаж для планшета (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% точен, но достаточно хорош, чтобы решить, на каком устройстве работает приложение.

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

Для людей, которые использовали

android:screenOrientation="nosensor"

и не работал сам по себе, я использовал его в дополнение к этому фрагменту в своей основной деятельности

@Override
protected void onCreate(Bundle savedInstanceState) {
    if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
            && (this.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) < Configuration.SCREENLAYOUT_SIZE_LARGE) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }else if((this.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE){
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
    }
    super.onCreate(savedInstanceState);
}

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

llPhone = (LinearLayout) findViewById (R.id.llPhone)
if (llPhone == null) {
 tablet = true;
}
else {
 tablet = false;
}
Другие вопросы по тегам