Реальный размер фонового изображения в Android (со строкой состояния) - PullRequest
2 голосов
/ 03 декабря 2010

Я бы хотел использовать высокодетализированное изображение в качестве фона в моем приложении, и у меня возникла проблема с моим дизайнером из-за этого: -D

К настоящему времени у нас есть три размера изображения (по одному на плотность) в соответствии с размером экрана наиболее распространенных устройств, как мы знаем:

  • низкая: 240 х 320 (например, HTC Tattoo)
  • , середина: 320 x 480 (например, HTC Magic)
  • высота: 480 x 800 (например, Nexus One)

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

Таким образом, мы решили изменить размеры изображений с помощью «высоты-минус-высоты строки состояния» (только в случае с высокой плотностью, как в тесте), получив, наконец, изображение размером 480 + 752 пикс. высота строки состояния составляет 48 пикселей)

Но он по-прежнему показывает эти «призрачные» строки, поэтому мы думаем, что его размер снова изменяется ...

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

Спасибо: -D

Ответы [ 3 ]

13 голосов
/ 03 декабря 2010

Вы настраиваете себя на постоянное состояние боли.Вы просто не можете проектировать против точных разрешений;Для этого существует слишком много вариантов устройств, и таким образом вы будете постоянно бить по лицу, сталкиваясь с новыми устройствами.В Android есть много возможностей для работы с этим разнообразием экранов, таких как 9-патчи, управление плотностью, менеджеры раскладки и т. Д. Если вы воспользуетесь этим, вы будете счастливы;если вы этого не сделаете, вы будете все время ругаться.

Но если вы хотите ругаться, я не могу вас остановить.Только, пожалуйста, не обращайтесь к сети с жалобами на фрагментацию Android.:)

Насколько ваше изображение масштабируется из-за строки состояния - да, строка состояния убирает часть экрана.Сколько не определено, поэтому вполне может незначительно отличаться между устройствами.Фон окна, установленный Activity.getWindow (). SetBackgroundDrawable (), будет расширяться за строкой состояния (и IME или другим переменным украшением системы), поэтому, по крайней мере, использование этого уменьшит изменение.Тем не менее, фактическое пространство дисплея может быть вырезано по другим причинам из физического размера экрана;намеренно не определено, в какой именно части экрана будет играть приложение.

2 голосов
/ 03 декабря 2010

Не забудьте о Droid A855 (разрешение 480x854), Galaxy Tab (1024x600) и многих других разрешениях. Лучше всего, если вам нужен пиксель-идеал, сделать изображение размером с самое большое разрешение в своей категории (то есть 480x854 для экрана hdpi нормального размера) и просто установить его как ImageView с помощью scaleType of centerCrop. Если подумать, ImageView будет работать (если используется атрибут android: background), но это не нужно. Вы можете просто установить фон NinePatch в качестве атрибута фона вашего корневого макета (например, RelativeLayout, LinearLayout). Если NinePatch правильно отформатирован, фон будет отцентрирован, а рамка будет растянута, чтобы соответствовать оставшемуся пространству без искажений. На Nexus One вы бы обрезали верхние и нижние 27 пикселей изображения, но его размер не изменился.

Лучшим предложением, в зависимости от типа изображения, было бы сделать его частью в NinePatch. Например, если у него есть небольшая рамка или рамка на внешних краях, уменьшите основную часть фона (430 x 750?), А внешние края рамки растяните с помощью NinePatch. Таким образом, даже если есть новое устройство с немного другим разрешением, оно все равно будет масштабироваться, чтобы соответствовать должным образом, без растяжения.

0 голосов
/ 04 апреля 2011

Я тоже искал решение на фоне, идущем за строкой состояния при использовании следующего метода: http://developer.android.com/resources/articles/window-bg-speed.html Я только что использовал произвольный пробел в верхней части графика bg для компенсации строки состояния.

Я также заметил полосатость, и я не думаю, что это потому, что его размер снова изменился. Эта статья исправила проблему на моем Nexus S: http://stuffthathappens.com/blog/2010/06/04/android-color-banding/ (также ссылается на статью developer.android, указанную выше)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...