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

【GiraKoo】Android监听屏幕尺寸变化通知的更多相关文章

  1. Android监听屏幕解锁和判断屏幕状态

    开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为 android.intent.action.USER_PRESENT的广播,则可以监听解锁事 ...

  2. Android 监听屏幕锁屏,用户解锁

    在做一个程序的时候,需要时刻保持某一服务是启动的,因此想到了通过监听屏幕SCREEN_ON和SCREEN_OFF这两个action.奇怪的是,这两个action只能通过代码的形式注册,才能被监听到,使 ...

  3. Android 监听屏幕锁屏&用户解锁

    在做视频播放器的时候,遇到一个问题,在用户播放视频然后锁屏之后,视频播放器仍然在继续播放,遇到类似手机系统状态改变的问题的时候,首先想到了广播,下面做个总结: public class ScreenL ...

  4. Android 监听屏幕唤醒和关闭的广播

    今天希望应用程序的服务运行时,可以监听到屏幕的唤醒.继续百度学习法,连同监听闭幕关闭也一同学习了. 此种情况需要动态注册系统广播.在AndroidManifest.xml中静态注册的实际运行中无效. ...

  5. android监听屏幕打开关闭广播无响应的情况

    android在屏幕打开和关闭的时候会发出广播,但是如果receiver配置在AndroidManifest.xml中时,receiver是接受不到任何广播的. <receiver androi ...

  6. 全局监听SCREEN_ON和SCREEN_OFF的替代方法--监听屏幕解锁事件

    在做一个程序的时候,需要时刻保持某一服务是启动的,因此想到了通过监听屏幕SCREEN_ON和SCREEN_OFF这两个action.奇怪的是,这两个action只能通过代码的形式注册,才能被监听到,使 ...

  7. Android监听消息通知栏点击事件

    Android监听消息通知栏点击事件 使用BroadCastReceiver 1 新建一个NotificationClickReceiver 类,并且在清单文件中注册!! public class N ...

  8. Android监听系统短信数据库变化-提取短信内容

    由于监听系统短信广播受到权限的限制,所以很多手机可能使用这种方式没法监听广播,从而没办法获取到系统短信,所以又重新开辟一条路. Android监听系统短信数据库内容变化使用场景: 1.监听短信数据库的 ...

  9. Android监听返回键、Home键+再按一次返回键退出应用

    Android监听返回键需重写onKeyDown()方法 Home键keyCode==KeyEvent.KEYCODE_HOME @Override public boolean onKeyDown( ...

  10. Android监听来电和去电

    要监听android打电话和接电话,只需下面2步骤1.第一步,写一个Receiver继承自BroadcastReceiver import android.app.Service; import an ...

随机推荐

  1. 90 条简单实用的 Python 编程技巧,建议收藏

    编码原则 建议 1:理解 Pythonic 概念 -- 详见 Python 中的<Python 之禅> 建议 2:编写 Pythonic 代码 避免不规范代码,比如只用大小写区分变量.使用 ...

  2. 通过 poe 免费使用ChatGPT、GPT-4

    poe 是由美版知乎 Quora 构建的AI 产品,提供实时在线与多个AI 机器人交流.Quora 于去年 12 月首次推出Poe 作为封闭测试版,并于2月份向所有 iOS 用户开放.支持 web 端 ...

  3. XCode汇编调试

    开启Xcode汇编调试 选中Always Show Disassembly项. XCode -> Debug -> Debug Workflow -> Always Show Dis ...

  4. 【牛客小白月赛69】题解与分析A-F【蛋挞】【玩具】【开题顺序】【旅游】【等腰三角形(easy)】【等腰三角形(hard)】

    比赛传送门:https://ac.nowcoder.com/acm/contest/52441 感觉整体难度有点偏大. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通 ...

  5. ByteHouse MaterializedMySQL 增强优化

    更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 前言 社区版 ClickHouse 推出了MaterializedMySQL数据库引擎,用于将 MySQL 中的表 ...

  6. Flask+Gunicorn+Nginx配置多个app

    请自行安装好nginx.gunicorn和flask的运行环境,这里不再赘述 Nginx配置 修改nginx的配置 vi /etc/nginx/sites-available/default //de ...

  7. python入门教程之十一迭代器、生成器和装饰器

    迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退 ...

  8. 和我一起学 Three.js【初级篇】:1. 搭建 3D 场景

    欢迎关注「前端乱步」公众号,我会在此分享 Web 开发技术,前沿科技与互联网资讯. 0. 系列文章合集 本系列第 6,7 章节支持微信公众号内付费观看,将在全系列文章点赞数+评论数 >= 500 ...

  9. Redis读书笔记(一)

    Redis数据结构 1 简单动态字符串 Simple dynamic string 的实现 // sds.h/sdshdr struct sdshdr { int len; //记录buf数组中已使用 ...

  10. tar:Error is not recoverable:exiting now

    问题描述:文件包在不同网络跟介质之间传输,导致文件破损,如何使用md5的方式去对比文件的完整性 tar:Child returned status 1 tar:Error is not recover ...