如何在继承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
相关产品推荐
相关产品推荐

