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

问题描述

我需要了解使用Kivy在Python中创建的应用程序中的屏幕分辨率(以像素为单位)。具体问题涉及Android。不幸的是,Kivy本身不想将从GL获得的信息传输给用户,因此我必须使用变通办法。根据{{​​3}}和pyjnius manual,在Android下为pyjnius,我尝试了以下代码

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,1])
    with b.canvas:
       Color(0,1,.2)
       Rectangle(size = Window.size,pos = (0,0))
    return b

MainApp().run()

但是结果是我所有三个值= 0,并且窗口大小= 800px,独立于platfrom。 Pyjnius手动使用方法getDeviceDensity()未在displayMetrics方法中进行记录。有什么其他方法可以在android下的kivy中检测屏幕分辨率吗?我可以直接调用SDL2来检测屏幕分辨率以及必须正确执行的操作吗? 屏幕快照(按要求)已附加。DisplayMetrics manual

谢谢。

解决方法

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

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

但是结果是我所有三个值= 0

这似乎是由于例如在this question中。