如何在 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/kivy/pyjnius 检测 Android 中的屏幕分辨率?的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 sklearns 的 LabelEncoder() 时检查分配给哪个标签的值?
如何在一个查询中通过 LINQ Include 检索子数据以提高性能?