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;
    }


}

Ответы