Intereting Posts
Android MVP – Следует избегать использования ссылок R.string в презентаторе? TextView Marquee не работает Конструкция материала рисунка ящика навигации Использование FragmentStatePagerAdapter БЕЗ поддержки библиотеки Файлы, отображаемые как пустые на ПК, но не пустые на смартфоне Android – изменение левого поля с помощью анимации Конфликт между привязкой данных Android и Guava вызывает ошибку ProGuard Невозможно нажать на элементы в ListView с помощью настраиваемого адаптера (Smooth) ScrollToPosition не работает должным образом с RecyclerView Исключение пользовательского виджета Android Что такое фокус звука в Android-классе AudioManager? Удалите нежелательные пакеты из загруженного источника Android до сборки Обновляет ли уведомление уведомление о статусе переднего плана службы? Контролируемый элемент меню панели действий не работает / отображается правильно? Когда использовать Enum / Int Constants

Размер экрана для Android с одинаковой плотностью

Я запутался в отношении плотностей. Я вижу, что при средней плотности разрешение экрана может быть 320×480, 480×800 или 480×854. Итак, если у меня есть изображение размером 300 пикселей в папке mdpi, как оно будет выглядеть одинаково на всех трех разных размерах экрана (в основном 320×480 против других 2)? И, посмотрев такой же размер, я имею в виду масштаб, который будет больше или меньше в зависимости от размера экрана. Благодарю.

Solutions Collecting From Web of "Размер экрана для Android с одинаковой плотностью"

Для понимания здесь есть три различных, но взаимосвязанных понятия: плотность экрана (пиксели на дюйм / сантиметр или широко известный как DPI от точек на дюйм в принтерах), размер физического экрана (в дюймах или сантиметрах) и количество пикселей (также известный как Разрешение в пикселях).

Эти термины не взаимозаменяемы, и вам нужно понять, как они взаимосвязаны, чтобы не путать с проблемой. Как правило, вы можете игнорировать размер физического экрана, поскольку это уже учтено в плотности. Например, экран шириной 3 дюйма и 300 пикселей в поперечнике будет иметь DPI 100. Кроме того, экраны телефонов имеют примерно одинаковый физический размер, даже если количество пикселей сильно отличается.

Итак, давайте рассмотрим экран G1 или Hero с разрешением 480×320 и плотностью около 160 точек на дюйм. Изображение шириной 300 пикселей будет 1,875 дюйма в поперечнике. Это вычисляется по размеру пикселя (300) / плотности (160). Теперь, если вы сравните это с экраном Nexus One, Droid или аналогичным, эти модели имеют экран с более высоким разрешением около 800×480 с высокой плотностью около 240 точек на дюйм. Если вы показываете одно и то же изображение шириной 300 пикселей, теперь он будет отображаться только физически на расстоянии около одного и четверти дюймов в поперечнике. Другими словами, он будет намного меньше. Это может быть проблемой, потому что если изображение содержит текст, текст может быть недоступен для чтения.

Android можно сказать, чтобы автоматически масштабировать изображения в соответствии с этими различными экранами, чтобы он по-прежнему выглядел одинакового размера. Это делается путем установки размеров в независимых размерах пикселей. Если что-то имеет ширину 100dp, оно будет иметь ширину 100px на экране средней плотности. На экране с высокой плотностью он будет иметь ширину 150 пикселей, но они будут выглядеть примерно одинаково на реальном экране. Однако, если вы сделаете это, ваше изображение может немного расплыться. Это то же самое, что при приближении к фотографии слишком близко к программе просмотра изображений; Края становятся размытыми, так как они «растягивают» их, пока вы увеличиваете масштаб.

Способ решения этой проблемы – использовать папки mdpi, hdpi и т. Д. Вы даете Android изображение, которое уже было масштабировано, так что ему не нужно делать это самостоятельно. Очевидно, что если вы просто растянете изображение самостоятельно в Photoshop, то это будет выглядеть не лучше. Но обычно один из них изменяет размеры очень больших изображений, чтобы они соответствовали мобильному экрану. В этом случае вы просто изменяете их по размеру три раза, каждый в другое разрешение.

Поэтому, наконец, ответьте на свой конкретный вопрос: если у вас есть изображение, размещенное в вашей папке mdpi, оно будет точно такого же размера, независимо от разрешения экрана, если они имеют одинаковую плотность. Что изменится, сколько пространства вокруг них, например, изображение шириной 320×320 пикселей заполняет большую часть экрана 320×480, но только около трети экрана 480×800. Однако, как отмечалось выше, обычно телефоны с более высоким разрешением также имеют более плотный экран. В этом случае Android не будет выглядеть в вашей папке mdpi для изображения – он перейдет в папку hdpi, и если он не сможет найти его там, он возьмет папку «drawable» по умолчанию. Затем, если вы используете DP, он автоматически масштабирует его, или если вы используете PX, он оставит его как есть, и он будет выглядеть меньше.

Там! Очень длинный ответ для вас. Надеюсь, это имеет смысл.

Для полноты также проверьте эту опцию для управления макетом:

Спецификаторы каталога:

 Размер: маленький, нормальный, большой
 Плотность: ldpi, mdpi, hdpi, nodpi (без автомасштабирования)
 Соотношение сторон: длинное, длинное
 Ориентация: земля

Применение:

res/layout/my_layout.xml res/layout-small/my_layout.xml res/layout-large/my_layout.xml res/layout-large-long/my_layout.xml res/layout-large-land/my_layout.xml res/drawable-ldpi/my_icon.png res/drawable-mdpi/dpi/my_icon.png res/drawable-hdpi/my_icon.png res/drawable-nodpi/composite.xml 

Ограничение вашего приложения на определенные размеры экрана (через AndroidManifest):

<manifest xmlns:android="http://schemas.android.com/apk/res/android"> ... <supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:anyDensity="true" /> ... </manifest> 

И для повышения уровня кода:


float scale = getContext().getResources().getDisplayMetrics().density; 

И не забывайте:

dpi = 160; //At 160dpi pixels = dips * (density / dpi)
dpi = 160; //At 160dpi pixels = dips * (density / dpi) 

Это все в этом документе: developer.android.com : поддержка нескольких экранов

Итак, если у меня есть изображение размером 300 пикселей в папке mdpi, как оно будет выглядеть одинаково на всех трех разных размерах экрана (в основном 320×480 против других 2)?

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

Не могли бы вы подтвердить формулу расчета плотности экрана?

Как я уже читал, следующая формула:

Плотность = SQRT (wp ^ 2 + hp ^ 2) / размер экрана

Wp -> ширина экрана (в пикселях) hp -> высота экрана (в пикселях) размер экрана -> размер физического экрана (диагональные дюймы)

Размер экрана (320×480) = SQRT (102400 + 230400) / 160 = 3,6 дюйма

Размер экрана (480×800) = SQRT (640000 + 230400) / 160 = 5,8 дюйма

Размер экрана (480×854) = SQRT (729316 + 230400) / 160 = 6,12 дюйма

Таким образом, макеты (экраны пользовательского интерфейса) управляются размерами экрана (малые: <3 ", нормальные <4", большие> 5 "), а доступные ресурсы (изображения) управляются плотностью экрана.

И размер изображения (в пикселях) не меняется, если плотность экранов (320×480, 480×800 или 480×854) одинакова.

Не могли бы вы подтвердить?

Спасибо, Рам

Это то, для чего предназначены независимые от устройства пиксели (DIP). Вместо 320px пишите 320dip .

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

Фактически код для вычисления физического размера экрана для устройств следующий:

 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); double x = Math.pow(dm.widthPixels/dm.xdpi,2); double y = Math.pow(dm.heightPixels/dm.ydpi,2); double screenInches = Math.sqrt(x+y);