如何在python/kivy/pyjnius上检测Android的屏幕分辨率?
我需要知道使用Kivy在Python中创建的应用程序的屏幕分辨率(以像素为单位)。具体问题与Android有关。不幸的是,Kivy本身不想将从GL获得的信息传输给用户,所以我不得不使用变通方法。在安卓系统下,它是pyjnius,据我所知,我尝试了以下代码:如何在python/kivy/pyjnius上检测Android的屏幕分辨率?,python,android,kivy,pyjnius,Python,Android,Kivy,Pyjnius,我需要知道使用Kivy在Python中创建的应用程序的屏幕分辨率(以像素为单位)。具体问题与Android有关。不幸的是,Kivy本身不想将从GL获得的信息传输给用户,所以我不得不使用变通方法。在安卓系统下,它是pyjnius,据我所知,我尝试了以下代码: from kivy.app import App from kivy.uix.button import Button from kivy.utils import platform from kivy.core.window import
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手动使用DisplayMetrics方法中未记录的getDeviceDensity()方法。有没有其他方法可以在android下检测kivy的屏幕分辨率?我是否可以直接调用SDL2来检测屏幕分辨率以及必须在哪里正确执行?
随附屏幕截图(按要求)
提前谢谢
不幸的是,Kivy本身不想将从GL获得的信息传递给用户
我不确定你的意思,kivy.core.window.window.size
应该给出gl显示大小。当然,这与您要求的屏幕分辨率不同——我不确定这对您是否重要
但是在结果中,我有三个值=0
这似乎是因为中所述的原因,例如。我确实尝试过,但Kivy window size的尺寸为800像素。我需要知道本机解决方案。至于第二个变量-我应该如何在pyjnius中使用getWindowManager().getDefaultDisplay().getMetrics(metrics)?Kivy窗口大小应该以像素表示可绘制的窗口大小。如果没有,那就是一个错误。你能用pos(0,0)和size Window.size绘制一个矩形,然后发布一个屏幕截图,显示它没有填满屏幕吗?对于pyjnius部分,我链接的方法应该可以在pyjnius中使用。sceenshot是在linux上的,但问题是关于Android的?至于pyjnius:logcat:python:[信息][窗口]不允许使用虚拟键盘,单模,未对接python:Traceback(最近一次调用最后一次):python:File“/home/osboxes/KivyHelloWorld/.buildozer/android/app/main.py”,第17行,python:NameError:name'getWindowManager'未定义python:android版python已结束。