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

我需要知道使用 Kivy 在 Python 中创建的应用程序中的屏幕分辨率(以像素为单位)。具体问题涉及Android。不幸的是,Kivy 本身不想将从 GL 获得的信息传输给用户,所以我必须使用变通方法。在Android下是pyjnius,根据pyjnius manualDisplayMetrics 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 来检测屏幕分辨率以及必须在哪里正确完成吗? 截图(按要求)附后。

提前致谢。

【问题讨论】:

    标签: python android kivy pyjnius


    【解决方案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 已结束。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 2011-06-05
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多