Портрет для телефона, пейзаж для планшета (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;
}