Android - плотностьDpi из журналов не совпадает с официальной информацией об устройстве
У меня есть рутина с той же логикой на любой платформе. Я не использую инструменты проектирования. Я обнаружил, что андроид - это только платформа с большим количеством проблем для очень простого запроса. Мне нравится использовать% (лучше всего для android является фреймэлей для абсолютной позиции). Я понимаю, что лучший способ для Android - это значения dp. Но из кода полностью отличается. Мне нужен расчет, чтобы получить назначение на дюйм.
int - плавающий кастинг делает меня сумасшедшим. только пиксели в коде не dp переменный тип x, y float, но для width/height int
LABEL_1.setY(0.5f * EKRAN.HEIGHT());
Это работает, но у меня проблемы с = > 1440 резолюций.
Когда я установил pos для > 90% экрана, есть некоторые потери в информации о местоположении Не работает хорошо на краевом экране. Например:
LABEL_1.setY(0.9f * EKRAN.HEIGHT());
На некоторых устройствах я вижу плотность Dpi → → → → 640, но это не реально. Когда я сравниваю данные данных устройства, я получаю разные значения.
Некоторые устройства Lenovo также улавливаются на Samsung Galaxy s6.
Пример:
Официальная информация устройства: 480 Печать журнала: 640
Я использую свой собственный класс:
public class SCREEN {
public DisplayMetrics dm = new DisplayMetrics();
Point size_ = new Point();
int width;
int height;
int densityDpi;
// DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
public SCREEN(Context CONTEXT_) {
dm = CONTEXT_.getResources().getDisplayMetrics();
densityDpi = dm.densityDpi;
height = dm.heightPixels;
width = dm.widthPixels;
}
// get full width
public int WIDTH() {
return width;
}
public int HEIGHT(){
return height;
}
public int HEIGHT_DPI(){
return (int) dm.xdpi;
}
public int W( int PER_ ){
return width/100*PER_;
}
public int H( int PER_ ){
return height/100*PER_;
}
public float PPI(){
return dm.density;
}
public int GETPIXFROMDP ( float DP_VALUE )
{
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DP_VALUE , dm );
}
public int GETPIXFROMDP2 ( float DP_VALUE )
{
float res = DP_VALUE * ( densityDpi / 160f);
System.out.println(" IN CALCULATION densityDpi :::: " + res );
return (int) res;
}
}