使用PyDroid开发时如何获取Android设备屏幕分辨率
问题根因
win32api、ctypes调用Windows系统接口的方案仅适配Windows平台,Android基于Linux内核,无Windows原生API层,两类方案在Android设备上必然无法正常运行。
PyDroid环境下可直接使用的实现方案
方案1:调用Android原生API(准确率最高,全设备适配)
PyDroid默认内置Pyjnius依赖,可直接调用Android原生系统接口获取物理屏幕真实分辨率,不受应用窗口缩放、系统导航栏显示状态影响:
from jnius import autoclass # 加载Android原生类 Resources = autoclass('android.content.res.Resources') current_activity = autoclass('org.kivy.android.PythonActivity').mActivity # 读取屏幕度量参数 display_metrics = Resources.getSystem().getDisplayMetrics() width_px = display_metrics.widthPixels height_px = display_metrics.heightPixels dpi = display_metrics.densityDpi print(f"设备物理屏幕分辨率:{width_px} × {height_px},屏幕DPI:{dpi}")
若运行提示找不到pyjnius模块,直接在PyDroid内置的包管理面板搜索
pyjnius安装即可,无需额外配置安卓开发环境。
方案2:读取系统配置文件(零额外依赖)
不需要安装第三方库的轻量方案,直接读取Android系统显示节点的配置信息:
def get_screen_res(): with open('/sys/class/graphics/fb0/modes', 'r') as f: mode_config = f.readline().strip() res_segment = mode_config.split(':')[1].split('p-')[0] width, height = map(int, res_segment.split('x')) return width, height w, h = get_screen_res() print(f"设备屏幕分辨率:{w} × {h}")
- 该方案需要应用拥有系统文件读取权限,部分深度定制ROM可能修改默认显示节点路径,稳定性弱于方案1。
方案3:Kivy窗口接口(适配Kivy开发的GUI应用)
如果是基于Kivy框架在PyDroid上开发GUI应用,可直接调用Kivy内置接口获取当前窗口尺寸:
from kivy.core.window import Window win_width = Window.width win_height = Window.height
- 注意:该接口返回的是应用当前可用窗口的尺寸,在虚拟导航栏切换显示状态、全面屏手势模式下返回值会动态变化,不是设备物理屏幕的固定分辨率。
内容的提问来源于stack exchange,提问作者ed.vcnt
相关产品推荐
相关产品推荐

