Как настроить макет Android для поддержки всех размеров экрана?

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

 

Изображение для маленького экрана здесь. Как настроить экран, совместимый с маленьким экраном? Где-то я нашел, используя папку «layout-small», но если я использую это, размер проекта увеличивается, я не хочу этого, так может ли кто-нибудь предложить мне лучший способ сделать это?

Перейдите по ссылкам. Это может помочь вам:

Поддержка различных размеров экрана

Поддержка нескольких экранов

Поддержка различных плотностей

Поддерживающие highcharts и трубки

AFAIK, единственный способ поддерживать все экраны – это бифуркация папки. Каждый файл XML увеличивается до нескольких килобайт. Таким образом, размер не должен быть слишком большой проблемой как таковой.

Решение для всех экранов и поддержка всех макетов.

  ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi ic_launcher 36x36 48x48 72x72 96x96 144x144 192x192 Notification 18x18 24x24 36x36 48x48 72x72 96x96 Action Bar & Tab 24*24 32*32 48*48 64*64 96*96 128*128 Background 240x320 320x480 480x800 720x1280 1080x1920 1440X2560 

Локальная папка:

 res/drawable (default) res/drawable-ldpi/ (240x320 and nearer resolution) res/drawable-mdpi/ (320x480 and nearer resolution) res/drawable-hdpi/ (480x800, 540x960 and nearer resolution) res/drawable-xhdpi/ (720x1280 - Samsung S3, Micromax Canvas HD etc) res/drawable-xxhdpi/ (1080x1920 - Samsung S4, HTC one, Nexus 5, etc) res/drawable-xxxhdpi/ (1440X2560 - Nexus 6,Samsung S6edge). ldpi (low) ~120dpi mdpi (medium) ~160dpi hdpi (high) ~240dpi xhdpi (extra-high) ~320dpi xxhdpi (extra-extra-high) ~480dpi xxxhdpi (extra-extra-extra-high) ~640dpi 

Планировка:

 layout-large-mdpi (1024x600) layout-large-tvdpi (800x1280) layout-large-xhdpi (1200x1920) layout-xlarge-mdpi (1280x800) layout-xlarge-xhdpi (2560x1600) res/layout/activity_main.xml # For handsets (smaller than 600dp available width) res/layout-sw600dp/activity_main.xml # For 7 inches tablets (600dp wide and bigger) res/layout-sw720dp/activity_main.xml # For 10 inches tablets (720dp wide and bigger) OR res/layout/layout #this is the default res/layout/layout-large #for 7 inches tablet and images from res/drawable-mdpi/xyz.png res/layout/layout-xlarge #for 10 inches tablet 

Ссылки:

Различные разрешения поддержки android

https://developer.android.com/guide/practices/screens_support.html

https://design.google.com/devices/

Есть ли список разрешений экрана для всех телефонов и планшетов на базе Android?

http://www.emirweb.com/ScreenDeviceStatistics.php

Самые популярные размеры экрана / разрешения на телефонах Android

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

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

Проблема возникает, когда мы устанавливаем Views/Layouts с некоторой постоянной шириной или значением высоты, например, 100dp .

Решение довольно просто попытаться использовать match_parent чтобы вид заполнил пустое пространство или использовал weight и определял каждый View отношению к другим Views это поможет вашему макету хорошо выглядеть почти во всех разрешениях экрана и во время выполнения задает LayoutParams только тех Views/Layouts которые имеют некоторую постоянную ширину или высоту в процентах .

     

Примечание. Я использовал px для ширины / высоты макета фиксированного размера, потому что в LayoutParams layoutParams = new LayoutParams(int width, int height); width и height принимают значение в пикселях

Вот пример кода

 final ViewTreeObserver mLayoutObserver = mLayout.getViewTreeObserver(); mLayoutObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { DisplayMetrics metrics = getResources().getDisplayMetrics(); int deviceWidth = metrics.widthPixels; int deviceHeight = metrics.heightPixels; float widthInPercentage = ( (float) 280 / 320 ) * 100; // 280 is the width of my LinearLayout and 320 is device screen width as i know my current device resolution are 320 x 480 so i'm calculating how much space (in percentage my layout is covering so that it should cover same area (in percentage) on any other device having different resolution float heightInPercentage = ( (float) 300 / 480 ) * 100; // same procedure 300 is the height of the LinearLayout and i'm converting it into percentage int mLayoutWidth = (int) ( (widthInPercentage * deviceWidth) / 100 ); int mLayoutHeight = (int) ( (heightInPercentage * deviceHeight) / 100 ); LayoutParams layoutParams = new LayoutParams(mLayoutWidth, mLayoutHeight); mLayout.setLayoutParams(layoutParams); } }); 

Я думаю, что код в значительной степени объясняет себя, если кому-то еще нужна помощь, которую вы можете сразу задать

Вывод: если вам нужно установить некоторую постоянную ширину / высоту для ваших Views/Layouts всегда устанавливайте значение в px в файле макета (т.е. xml), а затем программным образом устанавливайте LayoutParams .

Предложение: я думаю, что Google Android Guys должен серьезно подумать о замене единиц dp/dip на percentage .

Теперь поддерживать другой размер экрана проще! Используйте SDP нового размера.

SDP – единица масштабируемого размера

SDK для Android, который предоставляет новый размер – sdp (масштабируемый dp). Этот размерный блок масштабируется с размером экрана. Это может помочь разработчикам Android с поддержкой нескольких экранов.

для текстовых представлений обратитесь к ssp, который основан на блоке размера sp для текстов.

https://github.com/intuit/sdp

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

Чтобы добавить sdp в свой проект (с помощью Android Studio и Gradle):

добавьте реализацию ‘ com.intuit.sdp: sdp-android: 1.0.5 ‘ в ваш блок зависимостей build.gradle.

 for example: dependencies {'com.intuit.sdp:sdp-android:1.0.5' } 

Попробуйте использовать layout_weight, они помогут. 🙂

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

Я LinearLayout эту проблему, LinearLayout экран с помощью LinearLayout и определяя его ориентацию (горизонтальную или вертикальную), layout_weightsum = 3 (3 – разделение экрана на 3 части).

Затем внутри этого корневого линейного макета я снова беру LinearLayout с layout_height = "0dp" (если вы хотите, чтобы вертикальный раздел только в противном случае был layout_height = "wrap_content" и если вам нужно горизонтальное, тогда сделайте layout_width = "0dp" и layout_weight =1 (1 для 1 часть экрана вы также можете поместить значение в float как 1.2).

Можете попробовать, это помогает мне, может быть, и надежда поможет вам.

  • Добавить прописку на вид программно
  • Android: определение ориентации изменено
  • Android: использует setContentView несколько раз плохо при изменении раскладок?
  • Android: нарисуйте круг с текстом внутри
  • Добавить эффект пульсации на мою кнопку с цветом фона кнопки?
  • Закройте / спрячьте мягкую клавиатуру Android
  • Android - увеличение / уменьшение изображения RelativeLayout с распространением / пинчем
  • Утечка памяти с настраиваемым шрифтом для настраиваемого шрифта
  • Размещение фонового изображения
  • Изменение положения диалогового windows на экране Android
  • Как программно выложить Views в RelativeLayout?
  • Давайте будем гением компьютера.