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

相关推荐
三8442 小时前
PHP Session 反序列化(2):漏洞根因 —— 序列化处理器错位与对象注入
android·web安全·php·反序列化·session
天空之城--2 小时前
Android行业一周动态:编码趋势与行业资讯汇总
android·性能优化·架构·kotlin·android jetpack
Co_Hui4 小时前
Android Handler 内存泄漏分析
android
张小姐的猫5 小时前
【AI大模型接入SDK】 —— Gemini接入封装
android·数据结构·数据库·c++·人工智能·python
Anhty8 小时前
叮咚变声器上手实测,iOS短板、安卓悬浮窗使用感受分享
android·人工智能·功能测试·ios·智能手机
方白羽9 小时前
OkHttp 5.3 隐形变更引发的线上偶发崩溃复盘
android·app·客户端
EatFan10 小时前
【实战经验】uni-app使用 SSE 踩坑,EventSource不支持怎么办?
android·后端·ios·uni-app
JMchen10 小时前
第 2 篇|Kotlin 进阶 —— 集合、循环与条件表达式
android·kotlin
律宏阔11 小时前
Android 自定义 Launcher 加载第三方 App Widget
android
律宏阔11 小时前
Android 9 开发板实现系统侧滑返回
android