如何在 python/kivy/pyjnius 检测 Android 中的屏幕分辨率?

Posted

技术标签:

【中文标题】如何在 python/kivy/pyjnius 检测 Android 中的屏幕分辨率?【英文标题】:How to detect screen resolution in Android at python/kivy/pyjnius? 【发布时间】:2020-12-18 18:09:30 【问题描述】:

我需要知道使用 Kivy 在 Python 中创建的应用程序中的屏幕分辨率(以像素为单位)。具体问题涉及android。不幸的是,Kivy 本身不想将从 GL 获得的信息传输给用户,所以我必须使用变通方法。在Android下是pyjnius,根据pyjnius manual和DisplayMetrics manual我试过这段代码:

from kivy.app import App
from kivy.uix.button import Button
from kivy.utils import platform
from kivy.core.window import Window
from kivy.graphics import Canvas, Rectangle, Color

myheight=-100
mywidth=-100
myDPI=-100
gDPI=-100
Window.fullsceen = True

if platform == 'android':
    from jnius import autoclass
    DisplayMetrics = autoclass('android.util.DisplayMetrics')
    metrics = DisplayMetrics()
    gDPI=metrics.getDeviceDensity()
    myheight = metrics.heightPixels
    mywidth = metrics.widthPixels
    myDPI = metrics.densityDpi

class MainApp(App):
  def build(self):
    b = Button(text="Height: "+ str(myheight) + "\nWidth: " + str(mywidth) + "\nDPI: " + str(myDPI) + "\ngetDPI: " + str(gDPI)
+ '\nWindow.size:' + str(Window.size), color = [0,0,0,1])
    with b.canvas:
       Color(0,1,1, .2)
       Rectangle(size = Window.size, pos = (0,0))
    return b

MainApp().run()

但在结果中,我有所有三个值 = 0,并且窗口大小 = 800px,独立于 platfrom。 Pyjnius 手动使用方法 getDeviceDensity() 未在 DisplayMetrics 方法中记录。有没有其他方法可以在 android 下检测 kivy 中的屏幕分辨率?我可以直接调用 SDL2 来检测屏幕分辨率以及必须在哪里正确完成吗? 截图(按要求)附后。

提前致谢。

【问题讨论】:

【参考方案1】:

不幸的是,Kivy 本身不想将从 GL 获得的信息传输给用户

我不确定你的意思,kivy.core.window.Window.size 应该给出 gl 显示大小。当然,这与您要求的屏幕分辨率不同 - 我不确定这对您是否重要。

但在结果中我有所有三个值 = 0

这似乎是由于描述的原因,例如在this question。

【讨论】:

当然我已经尝试过了,但 Kivy 窗口大小有 800 像素大小。我需要知道本机分辨率。至于第二种变体——我应该如何在pyjnius中使用getWindowManager().getDefaultDisplay().getMetrics(metrics)? Kivy 窗口大小应该以像素为单位表示可绘制窗口大小。如果没有,那就是一个错误。你能用 pos (0, 0) 和大小 Window.size 绘制一个 Rectangle,然后发布一个屏幕截图显示它没有填满屏幕吗? 对于 pyjnius 部分,我链接的方法应该可以在 pyjnius 中使用。 截图是在linux上,但问题是关于Android的? 至于 pyjnius: logcat: python : [INFO ] [Window ] 虚拟键盘不允许,单一模式,不停靠 python : Traceback (最近一次调用最后): python : File "/home/osboxes /KivyHelloWorld/.buildozer/android/app/main.py",第 17 行,在 python 中:NameError: name 'getWindowManager' is not defined python:适用于 android 的 Python 已结束。

以上是关于如何在 python/kivy/pyjnius 检测 Android 中的屏幕分辨率?的主要内容,如果未能解决你的问题,请参考以下文章

如何在firebase中检索子(自动增量)名称

如何在使用 sklearns 的 LabelEncoder() 时检查分配给哪个标签的值?

如何在一个查询中通过 LINQ Include 检索子数据以提高性能?

如果系统处于活动状态,如何检入C ++?

如何检查分配给模式、oracle 数据库中角色的对象的权限(DDL、DML、DCL)?

XMLHttpRequest是什么如何完整地运行一次GET请求如何检測错误。