如何在安卓系统中编程获取屏幕尺寸

85

Android将屏幕大小定义为Normal、Large、XLarge等。它会自动选择合适文件夹中的静态资源。我需要在我的Java代码中使用当前设备的此数据。DisplayMetrics只提供有关当前设备密度的信息,没有关于屏幕尺寸的信息可用。

我在grep代码中找到了ScreenSize枚举类型,这里。但是,在4.0 SDK中似乎无法使用。是否有一种方法可以获取这些信息?

13个回答

0
如果您在非活动状态下,例如片段、适配器、模型类或任何其他不扩展Activity的Java类中,则简单地使用getResources()将无法工作。您可以在片段中使用getActivity()或使用传递给相应类的context
mContext.getResources()

我建议创建一个名为Utils的类,其中包含用于常见工作的方法/函数。这样做的好处是,在应用程序中调用此方法时,您可以使用单行代码获得所需的结果。

0
以下算法可用于确定在静态资源之间选择哪个类别,并且还适用于更新的XX和XXX高密度。
    DisplayMetrics displayMetrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    mDensityDpi = displayMetrics.densityDpi;
    mDensity = displayMetrics.density;
    mDisplayWidth = displayMetrics.widthPixels;
    mDisplayHeight = displayMetrics.heightPixels;

    String densityStr = "Unknown";
    int difference, leastDifference = 9999;

    difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_LOW);
    if (difference < leastDifference) {
        leastDifference = difference;
        densityStr = "LOW";
    }

    difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_MEDIUM);
    if (difference < leastDifference) {
        leastDifference = difference;
        densityStr = "MEDIUM";
    }

    difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_HIGH);
    if (difference < leastDifference) {
        leastDifference = difference;
        densityStr = "HIGH";
    }

    difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_XHIGH);
    if (difference < leastDifference) {
        leastDifference = difference;
        densityStr = "XHIGH";
    }

    difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_XXHIGH);
    if (difference < leastDifference) {
        leastDifference = difference;
        densityStr = "XXHIGH";
    }

    difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_XXXHIGH);
    if (difference < leastDifference) {
        densityStr = "XXXHIGH";
    }

    Log.i(TAG, String.format("Display [h,w]: [%s,%s] Density: %s Density DPI: %s [%s]", mDisplayHeight, mDisplayWidth, mDensity, mDensityDpi, densityStr));

0

在 Kotlin 中获取屏幕分辨率或屏幕尺寸

fun getScreenResolution(context: Context): Pair<Int, Int> {
    try {
        val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
        val display = wm.defaultDisplay
        val metrics = DisplayMetrics()
        display.getMetrics(metrics)
        val width = metrics.widthPixels
        val height = metrics.heightPixels
        //Log.d(AppData.TAG, "screenSize: $width, $height")
        return Pair(width, height)

    } catch (error: Exception) {
        Log.d(AppData.TAG, "Error : autoCreateTable()", error)
    }

    return Pair(0, 0)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接