2016-07-01 4 views
1

У меня есть работа A, которая имеет 2 типа макета. У телефонов есть единый макет, а планшеты имеют макет Master-Detail. Макет Master-Detail предназначен для 7-дюймового ландшафта и 10-дюймовых планшетов. я использовал следующие классификаторы макет:Проблема выбора макета Android

-layout - for phones 
-layout-sw720dp - for 10 inch tablet 
-layout-w820dp-land - for 7 inch tablet landscape 
-layout-h820dp - for 7 inch tablet portrait 

Недо теперь все работает отлично.

Проблема:

Теперь я хочу активность работать только в портретном режиме для телефонов и как в ориентации в 7 и 10-дюймовых планшетов, и для этого я использовал следующие ресурсы и отборочные размер от этого ссылка https://stackoverflow.com/a/14793611/373889

for res/values 
    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
      <bool name="portrait_only">true</bool> 
     </resources> 

for res/values-sw720dp 
    <?xml version="1.0" encoding="utf-8"?> 
    <resources> 
      <bool name="portrait_only">false</bool> 
     </resources> 

for res/values-w820dp-land 
     <?xml version="1.0" encoding="utf-8"?> 
     <resources> 
       <bool name="portrait_only">false</bool> 
      </resources> 

for res/values-h820dp 
     <?xml version="1.0" encoding="utf-8"?> 
     <resources> 
       <bool name="portrait_only">false</bool> 
      </resources> 

Теперь проблема, в 7-дюймовом планшете, если начата в портретном режиме, показывает нормальное расположение телефона в оба ориентации и, если началась в ландшафтном режиме, показывает мастер-Detail макет в оба ориентации. Он не работает, так как он должен работать. Телефоны работают нормально с обычной компоновкой, а 10-дюймовый планшет отлично работает с макетом Master-Detail в обоих направлениях.

Пожалуйста, дайте мне знать, если что-то не так с этим подходом. Спасибо.

ответ

1

Ну, по моему опыту, я думаю, что вы должны сделать макет для каждого размера экрана, и я думаю, вы сделали это. После setonContentView (...) это сделать:

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

И на основе высоты и ширины экрана блокировки или не ориентации устройства. Для блокировки вы можете добавить эти строки:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

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

Надеюсь, что это сработает, дайте мне знать.

+1

Я действительно использовал это on onCreate(); 'if (getResources(). GetBoolean (R.bool.portrait_only)) { setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } ' , но проблема заключается в том, что он поддерживает один и тот же макет для обеих ориентаций, тогда как мне нужен нормальный макет для портретной и макет-макета для пейзажа. – codeSucks