Портрет для телефона, альбом для планшета (Android-макет)
Итак, я делаю приложение для Android, и я хочу принудительно настроить ориентацию на планшеты и ориентацию на портрет для телефонов. Тем не менее, кажется, что я могу сделать только блокировку ориентации из того, что я видел, что наносит ущерб желанию двух отдельных ориентаций для устройств.
Таблетки: Пейзаж
Телефоны: Портрет
Сделать это более техническим.
У меня есть макет в "res/layout-xlarge-land" для озеленения на планшете, и у меня есть оригинальный макет в "res/layout", и я просто хочу явно использовать layout-xlarge-land для планшета. Ничего другого, по существу, ТОЛЬКО с использованием ландшафта для устройств xlarge.
Спасибо!
Ответы
Ответ 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;
}