【GiraKoo】Android监听屏幕尺寸变化通知

1,265 阅读1分钟

【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的启动时,主动获取一次数据。后续靠这个监听更新数据的变化。