Intereting Posts
Android P2P Многопользовательская игра (с) Обсуждение XMPP / Google b) JXTA peerdroid c) другим способом) Как подключить несколько файлов к почтовому клиенту в android Android Gradle Не удалось зарезервировать достаточно места для кучи объектов Android Spinner Размер очень большой Как сделать свечение текста? Как сделать кнопку «Edit» «Готово» Android и скрыть клавиатуру при нажатии? Невозможно получить доступ к zzbql в Firebase Bitmap возвращает null из BitmapFactory.decodeFile (имя файла) Проект библиотеки Android не может импортировать R-класс другого проекта библиотеки при использовании gradle для компиляции в командной строке Не удается загрузить проект: Android Studio Возможно ли создать диалоговое окно listview внутри? Обрезка изображения на любую форму Android Interpret Logcat entry: threadid = 8: все еще приостановлено после отмены (sc = 1 dc = 1 s = Y) Разница между android.os.Handler и java.util.logging.Handler? Разница между CursorLoader и AsyncTaskLoader

Специфичные по плотности макеты по сравнению с размерами в Android

В течение довольно долгого времени я объявлял папки ресурсов для 4 различных плотностей:

  • рисуем-ldpi
  • рисуем-MDPI
  • рисуем-ИПЧР
  • рисуем-xhdpi

В XML-формате макета я использую фиксированную ширину (хотя и не 128dp от плотности), например 128dp для этой графики.

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

Вот почему я думаю, что мне нужно добавить ресурсы Dimension , зависящие от размера экрана, для использования в XML-макетах, например:

  • значения
  • Значения-w600dp
  • Значения-w720dp
  • Значения-w1024dp

Но означает ли это, что я должен отказаться от поддержки этих контейнеров с плотностью 4? Или мне нужно предоставить 16 папок ресурсов, то есть один для каждой комбинации плотности и размера?

Я не могу найти хорошую помощь в документации Android по этой теме.

Чертежи и макеты разные. Чтобы ответить на ваш вопрос, вы должны прекратить поддерживать эти плотности. Да, но вы все равно должны поддерживать xdpi и hdpi. Ромен Гай недавно сказал, что современные устройства, такие как Nexus 7 (в tvpi), могут достаточно масштабировать активы настолько, что mdpi действительно не требуется. И никто больше не использует ldpi. Последнее, что я смотрел, было менее 2% рынка.

О макетах. Nexus 7 (1280×800 tvdpi) будет использовать что-то из значений-w1024dp, но все равно получать активы из папки drawable-hdpi. Эти два не являются взаимоисключающими. Что-то вроде S3 также вытащил бы из значений-w1024dp, но использовал drawable-xdpi. Вам только нужно предоставить альтернативный макет, если ваш прецедент требует его.

Так вам нужно 16 разных вещей? Нет. Вам нужно xdpi & hdpi (если не mdpi). Вы можете включить альтернативные макеты для разных размеров. Вы можете быть настолько конкретными, насколько хотите, или как общие. Если вы не делаете гибридное приложение для телефона и планшета (7 и 10 дюймов), вам, вероятно, не нужно много папок xxxx-sizexxx.

В XML-формате макета я использую фиксированную ширину (хотя и не зависящую от плотности), например 128dp для этой графики.

Вероятно, это источник ваших проблем. Ваши макеты должны быть максимально возможными, используя wrap_content и match_parent. Фиксированные размеры должны быть зарезервированы для заполнения по сторонам и изображения, где вы знаете размер заранее. Если вы это сделаете, ваш макет должен выглядеть прилично в любом размере от небольшого размера 320 x 200 до размера GTV.

1) Что касается размеров в ваших макетах (значения / dimens.xml):

Значения values-w600dp values-w720dp values-w1024dp

Но означает ли это, что я должен отказаться от поддержки этих контейнеров с плотностью 4? Или мне нужно предоставить 16 папок ресурсов, то есть один для каждой комбинации плотности и размера?

Нет, вам не нужно указывать разные размеры на дюйм (hdpi / xhdpi), поскольку размеры уже масштабируются или уменьшаются на основе устройства (если вы используете dp вместо px). Поэтому для измерений вам нужно только указать значения для устройств разного размера (отсюда и название, значения – минимальная ширина -600-dp). Поскольку вы не хотите заполнять 16dp на телефоне и 16dp на 10-дюймовом планшете. Вместо этого вам потребуется 64dp. И нет, не имеет значения, какая плотность имеет устройство. Он все равно должен иметь одинаковое дополнение На соответствующей ширине устройства. Поэтому для размеров вам нужно только подумать о фактических физических размерах устройства.

2) Что касается масштабирования чертежей для разных разрешений (drawables / xdpi): система масштабирует их соответствующим образом для устройства. Тебе не нужно беспокоиться об этом. Кроме того, здесь вам не нужно добавлять какие-либо другие ковши. Просто используйте mdpi / hdpi / xhdpi и, возможно, xxhdpi, потому что многие новые устройства будут использовать новую плотность в будущем.

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