`DisplayMetrics`动态获取屏幕的分辨率和像素密度

在Android应用程序中,你可以使用DisplayMetrics类来动态获取屏幕的分辨率和像素密度。以下是如何获取这些信息的示例代码:

java 复制代码
import android.content.Context;
import android.util.DisplayMetrics;
import android.view.WindowManager;

public class ScreenUtility {
    private int screenWidth;
    private int screenHeight;
    private float screenDensity;

    public ScreenUtility(Context context) {
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        DisplayMetrics metrics = new DisplayMetrics();
        if (windowManager != null) {
            windowManager.getDefaultDisplay().getMetrics(metrics);
            screenWidth = metrics.widthPixels;
            screenHeight = metrics.heightPixels;
            screenDensity = metrics.density;
        }
    }

    public int getScreenWidth() {
        return screenWidth;
    }

    public int getScreenHeight() {
        return screenHeight;
    }

    public float getScreenDensity() {
        return screenDensity;
    }
}

在上述类中,我们首先获得了WindowManager服务,然后创建一个DisplayMetrics对象以存储屏幕参数。我们调用windowManager.getDefaultDisplay().getMetrics(metrics);来填充DisplayMetrics对象,然后我们可以从DisplayMetrics对象中获取屏幕宽度(widthPixels)、屏幕高度(heightPixels)和屏幕密度(density)。

屏幕密度density是一个浮点数,表示每英寸的像素点数(dpi)除以160(基准密度)。例如,density值为2.0意味着屏幕的密度是320dpi(即2.0 * 160dpi)。

请注意,上述代码是一个简单的示例,你可以根据自己的应用程序需求对其进行扩展或修改。例如,你可能还想检索更多的显示指标,如缩放密度(scaledDensity),这对于计算文字大小等非常有用。

为了在活动(Activity)或片段(Fragment)中使用这个类,你可以这样做:

java 复制代码
ScreenUtility screenUtility = new ScreenUtility(this);
int width = screenUtility.getScreenWidth();
int height = screenUtility.getScreenHeight();
float density = screenUtility.getScreenDensity();

// 打印或使用获取到的屏幕参数
Log.d("Screen Info", "Width: " + width + "px, Height: " + height + "px, Density: " + density + "dpi");

this中传递上下文(Context),并通过相应的getter方法来获取屏幕参数。如果是在片段中,你可以使用getActivity()来获取与片段关联的活动的上下文。

相关推荐
QiLinkOS1 小时前
QiLink OS的失败数据共享平台的运作模式是否适用于所有行业?
android·开发语言·人工智能·算法·重构·开源
杉氧1 小时前
Framework 补完计划 (2):BufferQueue 与 SurfaceFlinger —— 像素的跨进程“接力赛”
android·架构·android jetpack
牢七1 小时前
RCE?复现成功
android
一化十1 小时前
Android16 自定义全局手势 任意界面依次点击屏幕四个角返回Home界面
android
三少爷的鞋3 小时前
Android 面试系列:Kotlin 协程的 delay 到底发生在哪个线程?
android
TechNomad15 小时前
Kotlin_Lambda编程详解
android·kotlin
熊猫_豆豆15 小时前
QT6 Android C++ 自制美观闹钟
android·c++·qt·闹钟
美狐美颜SDK开放平台15 小时前
Android/iOS直播APP平台开发中的视频美颜SDK优化技巧
android·ios·音视频·美颜sdk·第三方美颜sdk
聚美智数18 小时前
黄历查询-运势查询-国际法定节假日查询-API接口介绍
android·java·数据库
私人珍藏库20 小时前
[Android] 一木百宝箱-万能百宝箱+抖音去水印等几百种功能
android·人工智能·app·软件·多功能