2014-12-15 1 views
0

ОК, так вот шаткий один ... Прежде чем задать свой вопрос, я укажу, что я прочитал это: What is the difference between "px", "dp", "dip" and "sp" on Android? Так вот моя проблема, у меня есть некоторые квадраты на экране (EditText), который я определяю в своем XML, используя dp-единицы, и определяя их square1, square2 и т. Д., И они помещаются в FrameLayout (поскольку абсолютный макет устарел и что я не вижу другого макета, который бы соответствовал моим целям ; Я хочу, чтобы контролировать положение квадратов на экране путем программирования СОИ использоватьНесогласованность между рхами и дпом в андроиде

square1.setX(cc1x); 
square1.setY(cc1y); 
square2.setX(cc2x); 
square2.setY(cc2y); 

и так далее, и где cc1x, cc1y, cc2x, cc2y являются ИНТ переменные й при изменении в соответствии с логикой приложения. Проблема в том, что синтаксис java не позволяет добавить единицу к этому целочисленному значению переменных, поэтому на некоторых экранах мое приложение работает отлично, но на экранах с разной плотностью все либо слишком далеко друг от друга, либо перекрывается. ..

И, наконец, вопрос (ы): Есть ли способ «форсировать» единицы в операторы setX/setY?

или

Есть ли способ, чтобы получить плотность экрана устройства, на котором мое приложение будет работать? (в этом случае я мог бы пересчитать координаты X/Y соответственно) (Я еще не изучал эту вторую возможность, поскольку я просто подумал об этом, написав это, поэтому, пожалуйста, примите мои извинения, если это дубликат некоторых другой вопрос). Заранее благодарим за ваши мысли.

+1

Если бы вы могли конвертировать между px и dp на ваше устройство, это решило бы вашу проблему? Я уверен, что у меня есть код, который делает это где-то –

+0

Что именно вы пытаетесь сделать? В этом случае Android должен обрабатывать масштабирование. Вы можете использовать ints для float (так как я думаю, что это то, что setX и setY), но я не уверен, что это подходящий ответ, поскольку, скорее всего, он будет обработан более корректно с помощью форматированного xml. – zgc7009

+0

вам просто нужно умножить коэффициент dp/px. – njzk2

ответ

0

Вы можете добавить этот метод легко конвертировать между DP на экране и РХ устройства

public static float convertDpToPx(Context context, int dp) { 
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, context.getResources().getDisplayMetrics()); 
} 
+1

Лучше использовать TypedValue.COMPLEX_UNIT_DIP вместо значения «1», поскольку его значение может быть изменено в будущее. – user2340612

+1

Очень действительная точка.Отредактировал мой ответ. –

0

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

Смежные вопросы