【GiraKoo】Android监听屏幕尺寸变化通知
Android系统中存在多种情况可能导致屏幕尺寸发生变化。例如:横竖屏切换,虚拟按键,分屏,键盘弹出等。
App有的时候需要了解屏幕的真实尺寸,DPI等信息。由于Android的各个版本中对于DisplayMetrics的方法各有异同,且很多方法也标记为了Depreacated。此处整理一种现阶段可用的方案,供参考。
一、在Manifest中追加android:configChanges的配置
<activity
android:name=".MainActivity"
android:configChanges="orientation|screenSize|keyboardHidden" <======= 这一行。
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
具体可以监听的配置,可以参考官方文档:
处理配置变更 | Android 开发者 | Android Developers (google.cn))
二、在Activity中追加onConfigurationChanged的监听
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// 通过ApplicationContext获取DisplayMetrics
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
// 屏幕DPI
int dpi = metrics.densityDpi;
// 屏幕尺寸
int screenWidth = metrics.widthPixels;
int screenHeight = metrics.heightPixels;
}
P.S. 这个函数只有在变更时会被调用。程序第一次运行时,并不会走到此处。建议在Activity的启动时,主动获取一次数据。后续靠这个监听更新数据的变化。