2016-10-07 4 views
0

Я пытаюсь заблокировать телефон до портрета и планшета до пейзажа. Обычно я использую AndroidManifest.xml - android: screenOrientation = "portrait" Но как я могу настроить ориентацию на планшет/телефон по-разному? Спасибо!Android - Как заблокировать ориентацию для другого устройства?

+0

Дикая догадка: сделать 2 различных приложения? –

+0

@Rotwang 2 разных приложения - очень слабое решение. – deadfish

+3

@deadfish Но так они делают это на iDevices. Тогда все ли Apple-ориентированные разработчики «ламеров»? –

ответ

2

Лучшим решением является загрузка одного параметра из папки res из определенного значения. Поэтому, если ваше приложение работает на планшете, плотность экрана должна быть большой или равна 600dp.

В папке: Рез/значение-sw600dp/создать XML с парами:

<resources> 
    <bool name="isTablet">true</bool> 
</resources> 

В Резе папки/значение/создать XML с PARAM

<resources> 
    <bool name="isTablet">false</bool> 
</resources> 

После этого Вы сможете проверить, если приложение работает на планшете или телефоне, используя этот код:

boolean tabletSize = getResources().getBoolean(R.bool.isTablet); 
if (tabletSize) { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
} else { 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
} 

Источник из:
https://stackoverflow.com/a/9308284/619673
https://developer.android.com/guide/practices/screens_support.html

+0

Итак, нет способа установить его в xml? – user2062024

+0

значения из папки res могут быть использованы после запуска приложения, имхо не раньше. Благодаря многочисленным папкам имен в папке res i.e values-sw600dp или values-landscape Вы можете обрабатывать только определенную ситуацию. Ответ, который я дал вам, является imho лучшим и безопасным. – deadfish

0

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

или

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

и вы можете проверить Determine if the device is a smartphone or tablet?

0

Первый вы можете определить, работает ли ваше приложение на смартфоне или планшете, см. следующие answer

Теперь вы можете заблокировать ориентацию, используя следующий код:

If(isTablet) 
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
else 
    setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
0

Использование Java-код. В классе Java, который вы хотите сделать специальную ориентацию, используйте этот код:

if ((getResources().getConfiguration().screenLayout & 
      Configuration.SCREENLAYOUT_SIZE_MASK) == 
      Configuration.SCREENLAYOUT_SIZE_XLARGE) { 
     // on a X large screen device ... 
     getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    } else if ((getResources().getConfiguration().screenLayout & 
      Configuration.SCREENLAYOUT_SIZE_MASK) == 
      Configuration.SCREENLAYOUT_SIZE_LARGE) { 
     // on a large screen device ... 
     // do everythings you want to do ... 
    } else { 
     getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 
    } 

и в использовании фрагмента «getActivity()» вместо «это». А для удобства просмотра с устройством используйте этот код:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

Возможно, сработало. Удачи.

Смежные вопросы