Подтвердить что ты не робот

Портрет для телефона, альбом для планшета (Android-макет)

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

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

Сделать это более техническим.

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

Спасибо!

4b9b3361

Ответ 1

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

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

android:screenOrientation="nosensor"

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

Ответ 2

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

или

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

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

Ответ 3

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

Ответ 4

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

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);
}

Ответ 5

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

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