You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在继承Application的类中调用getWindowManager获取屏幕属性并计算屏幕英寸?

如何在自定义Application类中获取屏幕属性来计算屏幕英寸?

嘿,我来帮你搞定这个问题!你在自定义的myapplication类里想调用getWindowManager(),但直接调用肯定行不通——毕竟Application本身并没有这个方法。不过别担心,有两种靠谱的方式能让你在所有Activity启动前拿到屏幕属性,完成英寸计算:

方法一:通过getSystemService()获取WindowManager实例

Application继承自Context,所以你可以直接调用getSystemService()来获取WindowManager对象,进而拿到屏幕的DisplayMetrics:

public class myapplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        
        // 获取WindowManager实例
        WindowManager windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
        
        // 初始化DisplayMetrics并填充屏幕数据
        DisplayMetrics displayMetrics = new DisplayMetrics();
        windowManager.getDefaultDisplay().getMetrics(displayMetrics);
        
        // 用你掌握的方法计算屏幕对角线英寸
        float widthInches = displayMetrics.widthPixels / displayMetrics.xdpi;
        float heightInches = displayMetrics.heightPixels / displayMetrics.ydpi;
        float diagonalInches = (float) Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2));
        
        // 可以把结果存起来,后续Activity直接取用
        Log.d("ScreenCalculation", "屏幕对角线约:" + diagonalInches + "英寸");
    }
}

方法二:通过Resources获取DisplayMetrics(更稳妥简洁)

如果你担心WindowManager在Application初始化阶段的可用性(虽然大部分场景下都没问题),可以直接用Resources来获取屏幕数据——这种方式不需要依赖WindowManager,更简洁可靠:

public class myapplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        
        // 获取Application的Resources对象
        Resources resources = getResources();
        DisplayMetrics displayMetrics = resources.getDisplayMetrics();
        
        // 同样计算屏幕英寸
        float widthInches = displayMetrics.widthPixels / displayMetrics.xdpi;
        float heightInches = displayMetrics.heightPixels / displayMetrics.ydpi;
        float diagonalInches = (float) Math.sqrt(Math.pow(widthInches, 2) + Math.pow(heightInches, 2));
        
        Log.d("ScreenCalculation", "屏幕对角线约:" + diagonalInches + "英寸");
    }
}

重要提醒

别忘了在AndroidManifest.xml里注册你的自定义Application,否则系统不会使用它:

<application
    android:name=".myapplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.MyApp">
    <!-- 你的Activity等组件 -->
</application>

两种方法都能帮你在Activity启动前完成屏幕英寸计算,个人更推荐第二种,代码更简洁且兼容性更好~

内容的提问来源于stack exchange,提问作者mcfly soft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:31:55