`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()来获取与片段关联的活动的上下文。

相关推荐
众拾达人1 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
吃着火锅x唱着歌2 小时前
PHP7内核剖析 学习笔记 第四章 内存管理(1)
android·笔记·学习
_Shirley3 小时前
鸿蒙设置app更新跳转华为市场
android·华为·kotlin·harmonyos·鸿蒙
hedalei5 小时前
RK3576 Android14编译OTA包提示java.lang.UnsupportedClassVersionError问题
android·android14·rk3576
锋风Fengfeng5 小时前
安卓多渠道apk配置不同签名
android
枫_feng5 小时前
AOSP开发环境配置
android·安卓
叶羽西6 小时前
Android Studio打开一个外部的Android app程序
android·ide·android studio
qq_171538857 小时前
利用Spring Cloud Gateway Predicate优化微服务路由策略
android·javascript·微服务
Vincent(朱志强)8 小时前
设计模式详解(十二):单例模式——Singleton
android·单例模式·设计模式
mmsx9 小时前
android 登录界面编写
android·登录界面