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

相关推荐
fanged5 小时前
天马G前端的使用
android·游戏
molong9319 小时前
Kotlin 内联函数、高阶函数、扩展函数
android·开发语言·kotlin
叶辞树10 小时前
Android framework调试和AMS等服务调试
android
慕伏白12 小时前
【慕伏白】Android Studio 无线调试配置
android·ide·android studio
低调小一13 小时前
Kuikly 小白拆解系列 · 第1篇|两棵树直调(Kotlin 构建与原生承载)
android·开发语言·kotlin
跟着珅聪学java13 小时前
spring boot 整合 activiti 教程
android·java·spring
川石课堂软件测试14 小时前
全链路Controller压测负载均衡
android·运维·开发语言·python·mysql·adb·负载均衡
2501_9159214315 小时前
iOS 26 电耗监测与优化,耗电问题实战 + 多工具 辅助策略
android·macos·ios·小程序·uni-app·cocoa·iphone
2501_9159214315 小时前
苹果软件混淆与 iOS 应用加固白皮书,IPA 文件加密、反编译防护与无源码混淆方案全解析
android·ios·小程序·https·uni-app·iphone·webview
倔强的石头10616 小时前
【Linux指南】Linux命令行进度条实现原理解析
android·linux