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

Я собираюсь разработать новое приложение для Android. Это приложение должно работать только в портретной ориентации (даже для планшета). Также пользовательский интерфейс и дизайн макета должны быть одинаковыми на телефонах и планшетах. Мы не можем изменить дизайн макета для планшета, так как он имеет огромную площадь для использования. Мы должны растянуть все изображения, чтобы они соответствовали телефонам. Мы можем использовать девять патчей. Но я немного смущен использованием изображений в нескольких чертежах.

По моему анализу (может ошибаться.. :) ) экраны делятся на плотность и размер. Мы можем использовать коэффициент масштабирования 3:4:6:8. Но это соотношение основано на плотности. Но в моем случае мне приходится растягивать весь пользовательский интерфейс, чтобы заполнить экран планшета.

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

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

Кроме того, если бы я использовал несколько APK для поддержки разных размеров экрана, какие чертежи использовались для поддержки 1. Маленький и нормальный 2. Большой 3. Большой


person Sniper    schedule 21.11.2013    source источник
comment
возможный дубликат поддержка нескольких экранов в Android   -  person arpit    schedule 06.08.2015


Ответы (4)


Я только что сделал что-то очень похожее. Чтобы растянуть приложение без создания новых макетов, я использовал размеры, заданные в XML.

res/values/dimensions.xml
res/values-sw600dp/dimensions.xml -> 7+ inches
res/values-sw720dp/dimensions.xml -> 10+ inches

Размеры - это файлы ресурсов:

<dimen name="default_padding">11dp</dimen>

Вы можете увеличить размеры примерно на 30% в файле 600 и 720. Затем просто используйте @dimen/default_padding в своем макете, и он будет масштабироваться

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

person znat    schedule 21.11.2013
comment
Это не работает для меня. Несмотря ни на что, папка значений всегда используется. Есть ли свойство, которое позволит просматривать другие сегменты значений? - person portfoliobuilder; 03.10.2016

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

drawable/
drawable-large/
drawable-xlarge/

drawable-hdpi/
drawable-large-hdpi/
drawable-xlarge-hdpi/

drawable-xhdpi/
drawable-large-xhdpi/
drawable-xlarge-xhdpi/

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

Например, у вас может быть изображение размером 100 x 100, которое вы хотите отображать на телефонах (размер экрана "нормальный"), вы должны создать графические ресурсы с размерами 100 x 100, 150 x 150, 200 x 200 для папок drawable, drawable-hdpi, drawable-xhdpi соответственно. Но на 7-дюймовых планшетах, т. е. устройствах с «большим» экраном, вы можете отображать это же изображение с разрешением 200x200, поэтому ваши ресурсы папки «drawable-large» будут иметь размеры 200x200, 300x300, 400x400, а на 10-дюймовых планшетах — «xlarge». экраны, вы можете отображать одно и то же изображение с размерами 300x300, 450x450, 600x600, поэтому они помещаются в папки «drawable-xlarge-*».

Все подробности здесь:

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

person CSmith    schedule 21.11.2013
comment
Набор из четырех общих размеров: small, normal, large и xlarge ‹ — устарел, начиная с API 13. - person WarrenFaith; 13.01.2014

Сначала вам нужны все возможные макеты экрана

drawable
drawable-ldpi
drawable-mdpi
drawable-hdpi 
drawable-xhdpi   
drawable-xxhdpi // phones like s4  
drawable-xlarge
drawable-tvdpi  // nexus 7 etc 
drawable-xlarge-xhdpi //tablet like nexus 10  

layout : for phone 
layout-sw600dp
layout-sw720dp

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

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

DisplayMetrics metrics = getResources().getDisplayMetrics();

int densityDpi = (int) metrics.density ;
switch (densityDpi) {
     case (int) 1.5: 
         break;

     case (int) 2: //1.75 will be 2 in INT.
         break; 

     default:
         break;
}

также сохраните все значения, которые вы собираетесь использовать для заполнения полей и т. д. values-sw600dp для планшета tvdpi, value-sw720dp для планшетов

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

person Furqan    schedule 28.11.2013
comment
Извините, но почему вы пытаетесь обрабатывать числа с плавающей запятой как целые числа в случае переключения?! Плюс 1,75 не будет 2 с неявным приведением... это будет 1, вроде 1,5... - person WarrenFaith; 13.01.2014
comment
да, вы правы @WarrenFaith, я забыл использовать math.ceil, и я только что дал представление о том, как они могут решать проблемы. Что касается float, я использовал его, потому что Android dpi в десятичных дробях, но мне нужно установить отступы для некоторых кнопок в соответствии с плотностью устройства, поэтому мне нужно преобразовать его в int.. - person Furqan; 13.01.2014
comment
даже с ceil вы не должны приводить определенное значение с плавающей запятой к int только для того, чтобы вы могли использовать переключатель/кейс. Обычно вы должны просто реализовать конструкцию if/else. Было бы более чистым решением, чем какая-то магия с плавающей запятой/целое только для случая переключения... - person WarrenFaith; 13.01.2014

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

person Elhanan Mishraky    schedule 09.03.2015