Мое приложение Android отлично смотрится при разрешении 480x800 пикселей, но оно ломается на экране LDPI с разрешением 240x400 пикселей. Я знаю, что могу получить коэффициент масштабирования экрана в активности, используя getResources().getDisplayMetrics().density
которая даст точное значение float
зависимости от разрешения экрана.
В моем приложении я использовал RelativeLayout
и ImageView
внутри него и задавал поля изображений с помощью setMargins()
, так как этот метод использует пиксели в int
для своих верхних, левых, нижних и правых значений, как я могу установить эти значения с помощью DPI фактор, который я получил? (который является поплавком). У нас есть Math.floor()
но я позиционирую изображения в очень определенных местах с использованием пикселей, а коэффициент DPI, возвращаемый методом, имеет очень специфическое значение в десятичных разрядах, которые нельзя игнорировать, поэтому приведение в int
не работает для меня,
Обновить
Кроме того, я использую lp.setMargins(100,200,0,0);
для установки полей, какую модификацию я буду делать в ней, чтобы использовать коэффициент DPI, который я получил от устройства?
PS Я знаю, что это скорее математическая проблема, чем программирование, но я беден с математикой, извините.
Похоже, я слишком рано задавал этот вопрос, вместо того, чтобы возиться с самим собой, но также заметил, что я НЕ ВСЕ, кто первым сталкивается с этой проблемой.
Итак, вот решение, которое я нашел.
В моем классе Activity я создал следующий метод.
private int px(float dips)
{
float DP = getResources().getDisplayMetrics().density;
return Math.round(dips * DP);
}
Это преобразует заданное значение dp
в соответствующие пиксели. Вы можете сделать переменную DP
используемую в методе глобальной, и инициализировать ее в вашем onCreate()
а не в px()
, чтобы onCreate()
выполнение метода.
Применение:
lp.setMargins(px(100),px(200), 0, 0);
ИЛИ, если вы не создаете px()
только для этого и имеете DP
как глобальный.
lp.setMargins(100 * Math.round(DP), 200 * Math.round(DP), 0, 0);
Однако использование метода делает его более чистым и читаемым. :-)