У меня есть рутина с той же логикой на любой платформе. Я не использую инструменты проектирования. Я обнаружил, что андроид - это только платформа с большим количеством проблем для очень простого запроса. Мне нравится использовать% (лучше всего для 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;
    }
}
