Установка полей - ожидание пикселей, получение дпс? - PullRequest
1 голос
/ 24 апреля 2011

Это один из тех досадных случаев, когда все работает, но я не знаю почему.Основываясь на документации по API Android и на этом сайте, я ожидал, что мне потребуется выполнить преобразование плотности пикселей для параметров макета (показанных здесь в их исходном состоянии):

LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            lp.width = 60;   // the following three should be pixels, right??
            lp.height = 80;              
            lp.setMargins(1, 5, 1, 5);

Другими словами, я ожидал, что приведенное вышене работают хорошо при разных плотностях экрана, так как они указаны в пикселях.«Проблема» в том, что он отлично работает на всех симуляторах, которые я пробовал, начиная с QVGA и выше.Чтобы попытаться понять, почему, я использовал Hierarchy Viewer для проверки моего приложения и обнаружил, что ширина представления (из getWidth ()) всегда была 320, когда мое приложение было в фокусе.Вернитесь, скажем, к начальному экрану, и теперь HV сообщает, что ширина экрана равна 480.

Есть идеи, что происходит?

Ответы [ 3 ]

3 голосов
/ 24 апреля 2011

Значения действительно указаны в пикселях.Похоже, ваше приложение работает в режиме совместимости?

2 голосов
/ 24 апреля 2011

Согласно http://developer.android.com/guide/practices/screens%5Fsupport.html, если вы не объявите поддержку нескольких плотностей в своем манифесте, тогда он сообщит о среднем разрешении, и приложение будет вести себя так. Говорит:

Если приложение заявляет, что оно делает не поддерживает другой экран плотности, платформа авто-весы любые абсолютные пиксельные координаты, пиксель значения размеров и используемая пиксельная математика в приложении (например, может быть используется для указания ширины или прокладка для вида). Это делает это убедитесь, что пиксель-определенный экран элементы отображаются на примерно одинакового физического размера как они будут на базовом уровне плотность "средняя" (160). платформа обрабатывает это масштабирование прозрачно для приложения и также сообщает масштабированный общий пиксель размеры к заявке, скорее чем физические размеры в пикселях.

Например, предположим, что данное устройство является используя экран высокой плотности WVGA, что составляет 480x800 и примерно столько же размер как традиционный экран HVGA, но он работает приложение, которое утверждает, что он не поддерживает несколько плотности. В этом случае система будет "врать" приложению, когда оно запросы на размеры экрана и отчет 320х533. Затем, когда приложение выполняет операции рисования, такие как лишить законной силы прямоугольник из (10,10) - (100, 100), система будет аналогично автоматически преобразует координаты, масштабируя их соответствующее количество, а на самом деле признать недействительным регион (15,15) до (150, 150). То же самое происходит в другое направление, если приложение работает на экране с меньшей плотностью, координаты уменьшены.

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

Я тоже над этим недавно работал.Это тег anyDensity, о котором вы говорите?

Если да, то где он должен появляться в манифесте?

С уважением,

Оливер

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