Подтвердить что ты не робот

Android обрабатывает несколько экранов... (Относительная компоновка или линейная компоновка)?

Я закончил свое приложение и теперь мне нужно обработать адаптацию к нескольким размерам экрана.

В этот момент кажется, что мой единственный вариант - сделать следующее:

Имеет отдельный формат xml для: Малогабаритных, Нормальных, Больших и X-Больших размеров экрана. У вас есть отдельный xml-макет внутри: ldpi, mdpi, hdpi и xhdpi У вас есть отдельный xml-макет для портретного и ландшафтного дизайна.

В общей сложности 32 макета для одного действия.

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

Я прочитал немного, и люди сказали использовать Linear Layout и использовать гравитацию, так как это процент, поэтому он будет выглядеть одинаково на всех экранах. Или я мог бы использовать RelativeLayout и использовать "AlignAbove или ниже" и т.д.

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

Есть ли общепринятый способ сделать это?

Я действительно просто искал способ "основного потока", который средний разработчик обрабатывает всеми размерами экрана.

4b9b3361

Ответ 1

Хороший вопрос. Но так вы делаете не то, как разработчик профессиональный. Вам не нужно 32 макета для одного действия, Android достаточно умен, чтобы справляться с вещами.

Без множественного определения макетов/многомерного определения dimens.xml возможна поддержка нескольких устройств?

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

Предположим, у меня есть значительное приложение в Play Store с более чем 20 активностями, теперь, если бы я определил 32 макета для одного действия, тогда было бы более 600 макетов для моего приложения. Возможно ли это? Просто спросите себя.

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

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

Это утверждение достаточно, чтобы убедить вас, что вы не должны этого делать. Система Android достаточно умна, чтобы соответственно изменить размер вашего макета. И верьте мне, это действительно хорошо.

Как вы разрабатываете свой пользовательский интерфейс для разных размеров экрана, вы обнаружите, что для каждой конструкции требуется минимальное пространство. Итак, каждый обобщенный размер экрана выше имеет соответствующее минимальное разрешение, которое определено системой. Эти минимальные размеры находятся в единицах "dp" - те же единицы вы должны использовать при определении макетов

Я попытаюсь указать на некоторые важные вещи, которые вам нужно рассмотреть.

  • Никогда не фиксируйте пиксели в своем макете
  • Всегда используйте dp или sp в своих макетах. Как следует из названия, они не зависят от плотности различных устройств, поэтому будут выглядеть одинаково на каждом устройстве.
  • Всегда используйте wrap_content или match_parent для высот и ширины
  • Никогда не используйте AbsoluteLayout
  • RelativeLayout или LinearLayout оба будут отлично работать для вас, вам просто нужно решить, какой из них вы хотите использовать в зависимости от сценария
  • Всегда предоставлять разные версии ваших чертежей для разных размеров экрана. Это то, что вы не можете пропустить. Если вы этого не сделаете, не только ваш макет будет выглядеть ужасно на разных устройствах, но это заставит ваше приложение потреблять ненужные ресурсы.
  • Хотя один планшет отлично работает и на планшетах, но поскольку размеры экранов таблиц намного больше, чем у обычных телефонов, вам следует предоставить только отдельные макеты.

Редактор компоновки Android Rich Rich

Android Studio имеет потрясающий редактор макетов, где вы можете мгновенно просмотреть свой макет. Просто просмотрите этот снимок экрана ниже,

введите описание изображения здесь

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

У меня только два макета для этого действия, один для всех телефонов и один для всех планшетов.

Практический опыт

Если вам нужен практический опыт, у меня есть приложение, работающее в Play Store, которое используется тысячами пользователей на более чем 8000 различных устройствах разных размеров экрана.

У меня есть только 2 макета для определенного действия, один для телефонов и один для планшетов. Пользовательский интерфейс моего приложения хорошо выглядит на всех устройствах, и у меня никогда не было жалобы на него от любого пользователя. Если вам нужно, здесь является ссылкой на приложение.

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

UDPATE

Я попытаюсь снова очистить свое замешательство. Но, во-первых, я бы РЕКОМЕНДУЕТ вам прочитать мой ответ более одного раза.

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

Вам нужно хорошо использовать Редактор макетов HTML Studio Rich и его потрясающую функцию предварительного просмотра.

  • Сначала попробуйте создать макет, ориентированный на любой средний размер устройства (например, 5 дюймов Nexus 5). Просто выберите Nexus 5, чтобы просмотреть ваш макет.

  • Как только вы удовлетворены дизайном, выберите другие размеры экрана, чтобы просмотреть их. Вы также можете выбрать "Просмотр всех размеров", как показано на скриншоте выше.

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

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

Как и в моем приложении, у меня есть 2 отдельных макета только для 5-6 действий, но для остальных у меня только один макет. Все зависит от конкретного макета.

Разработка намного отличается от программирования. Программирование может быть определено формально и грамматически, но дизайн не может быть. Дизайн абсолютно субъективен и зависит от перспектив дизайнеров. Будьте изобретательны по-своему, это волшебство дизайна.

Ответ 2

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

Правильно ли вы используете устройства dp и sp?

дп

Независимые от плотности пиксели - абстрактный блок, основанный на физической плотности экрана. Эти единицы относятся к 160 dpi (точек на дюйм), на котором 1dp примерно равно 1px. когда работающий на экране с более высокой плотностью, количество пикселей, используемых для рисования 1dp масштабируется в соответствии с коэффициентом, соответствующим экрану dpi. Аналогично, когда на экране с более низкой плотностью используется количество пикселей для 1dp сокращается. Отношение dp-to-pixel будет изменяться с помощью плотность экрана, но не обязательно в прямой пропорции. Используя dp единицы (вместо единиц пикселей) - это простое решение для представления размеры в вашем макете правильно изменяются для разных экранов плотности. Другими словами, он обеспечивает согласованность для реального мира размеры элементов пользовательского интерфейса на разных устройствах.

зр

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

из документации android.

Ответ 3

Я думаю, что он хорошо читает документацию, они объясняют каждую вещь о поддержке нескольких экранов.

но все путают HOW и WHEN, мы должны использовать это, m я right?

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

первый раз очень сложно понять этот код, но мы разработчик так...

Пример: у меня есть один Android, поддерживающий API 10-22, и все устройства начинают с (Galaxy star s5280 - очень маленький экран) до 10-дюймового планшета (Nexus 10).

как управлять ресурсом,


POINT-1 начать с макета

создайте два макета, как показано ниже

res/layout/my_layout.xml   
res/layout-sw600dp/my_layout.xml // 7 inch tablets

ниже необязательный только в том случае, если вам нужен очень малый или большой макет

res/layout-small/my_layout.xml
res/layout-sw720dp/my_layout.xml // 10 inch tablets

POINT-2 вы также можете управлять макетами с помощью измерения

res/values/dimens.xml
res/values-sw600dp/dimens.xml // 7 inch tablets
res/values-sw720dp/dimens.xml // 10 inch tablets

POINT-3 добавить различные чертежи

res/drawable-mdpi/graphic.png 
res/drawable-hdpi/graphic.png 
res/drawable-xhdpi/graphic.png 
res/drawable-xxhdpi/graphic.png 

По моему опыту каждый использует комбинацию POINT 1 и 2 (согласно требованию), а POINT-3 универсален:). прочитайте Лучшие практики


End не забыл использовать <supports-screens> и <compatible-screens> в файле манифеста Android


EDIT:

Можно ли использовать значения-large и values-xlarge? Я смущен значения-large и значения-sw600dp

Примечание.. Начиная с Android 3.2 (уровень API 13), эти группы размеров устарели в пользу нового метода управления размерами экрана на основе доступной ширины экрана. Если вы разрабатываете Android 3.2 и выше, см. Объявление макетов планшета для Android 3.2 для получения дополнительной информации.

сначала прочитайте выше направляющие строки, в соответствии с ними нам не нужно использовать such as large or xlarge, просто используйте 600dp of width. то есть для >= 3.2 android os. его работа ожидается на каждом устройстве, но вы можете столкнуться с проблемой в устройствах серии GALAXY, таких как GALAXY TAB-2, GRAND, потому что у них есть старый API за раз, когда вы можете использовать value-large и values-xlarge. это конкретная проблема устройства, только когда это необходимо.


еще одно примечание: создайте над компоновкой несколько файлов по мере необходимости, как у нас есть listview в макете, а затем просто создайте один файл, то же самое для всех устройств, включая планшеты, например, вы также можете управлять своим размером приложения.

ЛИНЕЙНАЯ, ОТНОСИТЕЛЬНАЯ и РАМКА компоновки облегчат вам жизнь.

Ответ 4

Вы можете добиться этого, построив макеты динамически. Он может поместиться для всех экранов. В Android Мы не можем получить выводы о доступных мобильных экранах. Существует много экранов с различными разрешениями. Чтобы сделать пользовательский интерфейс гибким. необходимо динамически конструировать макет. Например, я добавил один xml, который может быть исправлен для всех экранов (в портрете).

xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="10"
android:gravity="center">


<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="0dip"
    android:layout_weight="4"
    android:weightSum="10"
    android:gravity="center">

    <ImageView
         android:layout_width="0dip"
        android:layout_weight="3"
        android:layout_height="match_parent"
        android:src="@mipmap/ic_launcher"
        android:id="@+id/imageView3" />
</LinearLayout>

</LinearLayout>