Android-Studio: Макет для широкого экрана в портретном режиме

У меня есть приложение, которое должно работать только в портретном режиме. он отлично работает, используя только ресурсы (Layout). Теперь у меня проблема с каким-то устройством,

  • В аппарате есть только портретный режим, ориентации нет, меня устраивает.
  • Высота экрана меньше его ширины, и помните, что это не альбомный режим.

     __________
    | portrait |
    |__________|
    
  • Если бы я использовал Layout-land, это не сработает, и устройство выберет обычный ресурс макета.

Я пробовал layout-sw, layout-w, layout-h, но без решения.

Я хочу, чтобы обычные устройства использовали «макет», а устройства, высота которых меньше ширины, использовали другой макет.

И помните, пожалуйста, это не пейзаж.

Заранее спасибо.

================================================== =========

Обновлять

Есть ли способ использовать Layout-11x00, где 11 - ширина, а 00 - высота? Я попробовал, и это сработало, но проблема в том, что он работал для всех устройств, а не только для широких устройств. Я пробовал Layout-774x480 как w = 774 и h = 480. но он работал также с моим мобильным телефоном Samsung, я не хочу этого. Почему, когда я установил макет на "Layout-774x480", он нацелился на мой samsung? в то время как ширина моего самсунга не> высота ?! Я имею в виду, чем отличается "Макет-774х480" от "Макет-480х774"?

Спасибо Reaz за редактирование.

Flying light 18.04.2018 08:56

Добро пожаловать. :)

Reaz Murshed 18.04.2018 09:09

Кто-нибудь может помочь, пожалуйста? Как я могу решить эту проблему? С Уважением

Flying light 23.04.2018 10:05
1
3
428
1

Ответы 1

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

В вашем случае вам просто нужно создать каталог макета с именем res/layout-w600dp/main_activity.xml, который указывает, что если экран устройства имеет ширину 600dp и больше, макет будет выбран из этой папки.

Я проверил, что вы уже пробовали с настройками layout-w, layout-h и layout-sw. Однако я думаю, что вам не хватает ожидаемой ширины экрана устройства, которую следует выбрать.

Надеюсь, это поможет!

Обновлять

Если вы хотите установить другой макет на основе решения о том, что высота меньше ширины, то вы можете просто подумать о проверке высоты и ширины экрана перед настройкой вида содержимого для действия.

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;

if (height > width) setContentView(R.layout.main_activity.xml);
else setContentView(R.layout.main_activity_wide.xml);

Спасибо. но я не имею в виду точную ширину. У меня есть некоторые устройства, у которых ширина> его высота в портретном режиме (это не альбомный). как создать Layout для этих устройств помимо обычных.

Flying light 18.04.2018 08:55

Спасибо, но нет возможности сделать это без жесткого программирования? Кроме того, если я проверил ширину и высоту и проверил, есть ли w> h, не будет ли это верно, если устройство находится в ландшафтном режиме? Я имею в виду, я хочу, чтобы он работал с обычными устройствами, а также с широкими устройствами. Кроме того, если я его жестко запрограммировал, мне придется самому обрабатывать все возможности рисования в коде.

Flying light 18.04.2018 09:27

Вы можете легко управлять ландшафтным режимом, переопределив функцию onConfigurationChanges. Однако динамический режим не подходит для вашей ситуации, которую я уже предлагал ранее.

Reaz Murshed 18.04.2018 09:29

То есть у меня одно устройство в портретном режиме и его w> h. другое устройство в ландшафтном режиме и его w> h. Я не позволяю моему приложению работать в ландшафтном режиме, но в этих двух случаях (если w> h) будет = true.

Flying light 18.04.2018 09:31

Могу ли я использовать Layout-11x00, где 11 - ширина, а 00 - высота? Я попробовал, и это сработало, но проблема в том, что он работал для всех устройств, а не только для широких устройств. Я пробовал Layout-774x480 как w = 774 и h = 480. но он работал также с моим мобильным телефоном Samsung, я не хочу этого.

Flying light 18.04.2018 09:35

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

Reaz Murshed 18.04.2018 09:45

Кто-нибудь может помочь, пожалуйста? Как я могу решить эту проблему? С Уважением

Flying light 23.04.2018 10:05

Другие вопросы по теме