هل هناك طريقة لتحديد ارتفاع شاشة Android في CM أو بوصة؟

StackOverflow https://stackoverflow.com/questions/2193457

سؤال

أحتاج إلى معرفة مدى حجم الشاشة على الجهاز في وحدات ذات طول حقيقي حتى أتمكن من حساب التسارع بسبب الجاذبية في وحدات البكسل لكل ميلي ثانية.

هل هناك طريقة في مكان ما في Android API لهذا الغرض؟

هل كانت مفيدة؟

المحلول

استخدم ما يلي:

    DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(mWidthPixels/dm.xdpi,2);
    double y = Math.pow(mHeightPixels/dm.ydpi,2);
    double screenInches = Math.sqrt(x+y);
    Log.d("debug","Screen inches : " + screenInches);

عندما يتم أخذ mwidthpixels و mheightpixels من الكود أدناه

private void setRealDeviceSizeInPixels()
{
    WindowManager windowManager = getWindowManager();
    Display display = windowManager.getDefaultDisplay();
    DisplayMetrics displayMetrics = new DisplayMetrics();
    display.getMetrics(displayMetrics);


    // since SDK_INT = 1;
    mWidthPixels = displayMetrics.widthPixels;
    mHeightPixels = displayMetrics.heightPixels;

    // includes window decorations (statusbar bar/menu bar)
    if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
    {
        try
        {
            mWidthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
            mHeightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
        }
        catch (Exception ignored)
        {
        }
    }

    // includes window decorations (statusbar bar/menu bar)
    if (Build.VERSION.SDK_INT >= 17)
    {
        try
        {
            Point realSize = new Point();
            Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
            mWidthPixels = realSize.x;
            mHeightPixels = realSize.y;
        }
        catch (Exception ignored)
        {
        }
    }

انظر هذا المنشور للرجوع إليه:احصل على أبعاد الشاشة بالبكسل

نصائح أخرى

للحصول على الحجم الحالي ، استخدم Math.round في النهاية.

 DisplayMetrics dm = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(dm.widthPixels/dm.xdpi,2);
    double y = Math.pow(dm.heightPixels/dm.ydpi,2);
    double screenInches = Math.sqrt(x+y);
    Log.d("debug","Screen inches : " + screenInches);

screenInches=  (double)Math.round(screenInches * 10) / 10;

مطوري Android معلومات الشاشة.

استعمال xdpi * widthPixels و ydpi * heightPixels قد تحصل على ما تريد على ما أعتقد.

سيساعدك مقتطف الرمز التالي على الحصول على حجم الشاشة بالبوصة

public static double getScreenSizeInches(Activity activity){
    WindowManager windowManager = activity.getWindowManager();
    Display display = windowManager.getDefaultDisplay();
    DisplayMetrics displayMetrics = new DisplayMetrics();
    display.getMetrics(displayMetrics);

    // since SDK_INT = 1;
    int mWidthPixels = displayMetrics.widthPixels;
    int mHeightPixels = displayMetrics.heightPixels;

    // includes window decorations (statusbar bar/menu bar)
    if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) {
        try{
            mWidthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
            mHeightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
        } catch (Exception ignored) {}
    }

    // includes window decorations (statusbar bar/menu bar)
    if (Build.VERSION.SDK_INT >= 17) {
        try {
            Point realSize = new Point();
            Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
            mWidthPixels = realSize.x;
            mHeightPixels = realSize.y;
        } catch (Exception ignored) {}
    }

    DisplayMetrics dm = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
    double x = Math.pow(mWidthPixels / dm.xdpi, 2);
    double y = Math.pow(mHeightPixels / dm.ydpi, 2);
    return Math.sqrt(x + y);
}

نأمل أن تكون هذه المساعدة.

لقد استخدمت هذا للحصول على الحجم الحقيقي

final DisplayMetrics metrics = new DisplayMetrics();
final WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
    windowManager.getDefaultDisplay().getRealMetrics(metrics);
}
else {
    windowManager.getDefaultDisplay().getMetrics(metrics);
}
int realHeight = metrics.heightPixels; // This is real height
int realWidth = metrics.widthPixels; // This is real width

تحتاج إلى استخدام كثافة الشاشة لحساب هذا.

Context.getResources().getDisplayMetrics().density

وفقا للوثائق:

الكثافة المنطقية للعرض. هذا عامل تحجيم لوحدة بكسل مستقلة الكثافة ، حيث يكون تراجع واحد هو بكسل واحد على شاشة حوالي 160 نقطة في البوصة (على سبيل المثال شاشة 240x320 ، 1.5 "x2") ، مما يوفر الأساس لشاشة النظام. وبالتالي على شاشة 160dpi ستكون قيمة الكثافة هذه 1 ؛ على شاشة 120 نقطة في البوصة سيكون .75 ؛ إلخ.

لا تتبع هذه القيمة بالضبط حجم الشاشة الحقيقي (كما هو موضح بواسطة XDPI و YDPI ، ولكن يتم استخدامه لتوسيع حجم واجهة المستخدم الإجمالية في خطوات استناد كثافة 1 حتى لو كان عرضه 1.8 "، 1.3" ، إلخ. ومع ذلك ، إذا تم زيادة دقة الشاشة إلى 320 × 480 ولكن بقي حجم الشاشة 1.5 "x2" ، فسيتم زيادة الكثافة (ربما إلى 1.5).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top