如何让我的 kivy 布局在 iPad 和 iPhone 上保持相同的比例?
How can I make my kivy layout the same scale on iPad and iPhone?
我的应用程序在我的 iPhone 上运行,规模看起来不错。我 运行 现在在我的 iPad 上,所有内容的间距都更大了,文本看起来也更小了。我在两台设备上都打开了该应用程序,并将它们放在一起,看起来两台设备上的文本大小实际上是一样的。显然它在更大的屏幕上看起来更小。
另一件有点奇怪的是,在 iPad 上,应用程序屏幕完全填满了整个屏幕,但在 iPhone 上,它有点害羞 运行顶部和底部各增加约 10%。
我已经仔细查看了 apple 的资料和 kivy 文档,但看不出任何结论。
我怎样才能使它们在任何 iOS 设备上自动缩放?另外,如何让应用程序填满 iPhone 上的整个屏幕?是 Xcode 中需要更改的东西,还是 kivy 的东西?我在这里有点迷路了。非常感谢任何帮助。
编辑:
我将从我的一个 kivy 页面中添加一个小部件,也许问题出在我的布局方式上。
BoxLayout:
pos_hint: {"top": .9, "center_x": .5}
size_hint: 1, .3
size_hint_y: None
height: 450 # set 330 for iphone
ScrollView:
Label:
id: brief_res_1
font_size: '11sp'
do_scroll_x: True
size_hint_y: None
size_hint_x: None
size: self.texture_size
halign: "left"
valign: "center"
text:
我建议在 kv
中使用 size_hint
和 pos_hint
作为小部件,并使用 kivy.metrics
(sp
) 作为 font_size
.
据我所知,由于 iPhones 和 iPads 的屏幕尺寸和比例不同,目前您的问题没有具体的答案。但是,我建议您尝试 2 个解决方案:
kivy.utils
中的 platform
变量存储 运行 所在平台的名称。如果我是正确的,如果你的应用在 iPhone 上是 运行 那么它应该 return "ios"
,"unknown"
对于 iPad,因为它显然不检查 "ipados"
。如果是这样,你应该从你的 iOS 兼容脚本中创建一个单独的 kivy 脚本,它更喜欢 iPad 屏幕尺寸,然后你可以添加一个检查,像这样:
from kivy.utils import platform
from kivy.lang import Builder
if platform == "ios":
Builder.load_file("ios.kv")
elif platform == "unknown":
Builder.load_file("ipados.kv")
else:
# your preferences...
- 如果由于某种原因
platform
returns "ios"
在 iPad 上,那么我说你应该先获取屏幕分辨率,然后进行类似的检查对于上面的例子,是这样的:
from kivy.core.window import Window
Window.fullscreen = True
Window.maximize()
resolution = Window.size
Window.fullscreen = False
if resolution[0] / resolution[1] < 1:
Builder.load_file("ios.kv")
else:
Builder.load_file("ipados.kv")
我的应用程序在我的 iPhone 上运行,规模看起来不错。我 运行 现在在我的 iPad 上,所有内容的间距都更大了,文本看起来也更小了。我在两台设备上都打开了该应用程序,并将它们放在一起,看起来两台设备上的文本大小实际上是一样的。显然它在更大的屏幕上看起来更小。
另一件有点奇怪的是,在 iPad 上,应用程序屏幕完全填满了整个屏幕,但在 iPhone 上,它有点害羞 运行顶部和底部各增加约 10%。
我已经仔细查看了 apple 的资料和 kivy 文档,但看不出任何结论。
我怎样才能使它们在任何 iOS 设备上自动缩放?另外,如何让应用程序填满 iPhone 上的整个屏幕?是 Xcode 中需要更改的东西,还是 kivy 的东西?我在这里有点迷路了。非常感谢任何帮助。
编辑: 我将从我的一个 kivy 页面中添加一个小部件,也许问题出在我的布局方式上。
BoxLayout:
pos_hint: {"top": .9, "center_x": .5}
size_hint: 1, .3
size_hint_y: None
height: 450 # set 330 for iphone
ScrollView:
Label:
id: brief_res_1
font_size: '11sp'
do_scroll_x: True
size_hint_y: None
size_hint_x: None
size: self.texture_size
halign: "left"
valign: "center"
text:
我建议在 kv
中使用 size_hint
和 pos_hint
作为小部件,并使用 kivy.metrics
(sp
) 作为 font_size
.
据我所知,由于 iPhones 和 iPads 的屏幕尺寸和比例不同,目前您的问题没有具体的答案。但是,我建议您尝试 2 个解决方案:
kivy.utils
中的platform
变量存储 运行 所在平台的名称。如果我是正确的,如果你的应用在 iPhone 上是 运行 那么它应该 return"ios"
,"unknown"
对于 iPad,因为它显然不检查 "ipados"
。如果是这样,你应该从你的 iOS 兼容脚本中创建一个单独的 kivy 脚本,它更喜欢 iPad 屏幕尺寸,然后你可以添加一个检查,像这样:
from kivy.utils import platform
from kivy.lang import Builder
if platform == "ios":
Builder.load_file("ios.kv")
elif platform == "unknown":
Builder.load_file("ipados.kv")
else:
# your preferences...
- 如果由于某种原因
platform
returns"ios"
在 iPad 上,那么我说你应该先获取屏幕分辨率,然后进行类似的检查对于上面的例子,是这样的:
from kivy.core.window import Window
Window.fullscreen = True
Window.maximize()
resolution = Window.size
Window.fullscreen = False
if resolution[0] / resolution[1] < 1:
Builder.load_file("ios.kv")
else:
Builder.load_file("ipados.kv")