指标¶
在 1.5.0 版本加入.
屏幕由其物理尺寸、密度和分辨率定义。这些因素对于在任何地方创建尺寸正确的UI至关重要。
在Kivy中,所有图形管线均以像素为单位工作。然而,使用像素作为测量单位存在问题,因为尺寸会随屏幕变化而改变。
尺寸¶
如果你希望为不同屏幕尺寸设计用户界面,就需要使用更好的测量单位。Kivy 提供了一些更具可扩展性的替代方案。
- 单位:
- pt
点(pt)——基于屏幕物理尺寸的1/72英寸。建议优先使用sp而非pt。
- mm
毫米 - 基于屏幕的物理尺寸。
- cm
厘米 - 基于屏幕的物理尺寸。
- in
英寸 - 基于屏幕的物理尺寸。
- dp
密度无关像素 - 一种基于屏幕物理密度的抽象单位。当
density为 1 时,1dp 等于 1px。在更高密度的屏幕上运行时,用于绘制 1dp 的像素数量会按屏幕 dpi 的相应比例放大,而在较低 dpi 的屏幕上则相反。dp 与像素的比率会随屏幕密度变化,但不一定成正比。使用 dp 单位是一种简单的解决方案,可使布局中的视图尺寸在不同屏幕密度下正确调整。换句话说,它为你的 UI 在不同设备上的实际尺寸提供了一致性。- sp
与缩放无关的像素 - 这类似于dp单位,但还会根据用户的字体大小偏好进行缩放。我们建议您在指定字体大小时使用此单位,这样字体大小将同时适应屏幕密度和用户的偏好。
示例¶
以下是一个创建标签的示例,其中设置了sp字体大小,并手动设置了高度,带有10dp的边距::
#:kivy 1.5.0
<MyWidget>:
Label:
text: 'Hello world'
font_size: '15sp'
size_hint_y: None
height: self.texture_size[1] + dp(10)
手动控制度量标准¶
指标无法在运行时更改。一旦值被转换为像素,就无法再获取原始值。这是因为设备的DPI和密度无法在运行时更改。
我们提供了一些环境变量来控制指标:
KIVY_METRICS_DENSITY:如果设置了此值,将使用该值代替系统的
density。在安卓系统上,该值在 0.75、1、1.5 和 2 之间变化。KIVY_METRICS_FONTSCALE:如果设置了该值,将使用此值作为
fontscale,而不是系统值。在安卓系统上,该值在0.8到1.2之间变化。KIVY_DPI:如果设置了此值,它将被用于
dpi。请注意,设置 DPI 不会影响 dp/sp 表示法,因为这些是基于屏幕密度的。
例如,如果你想模拟高密度屏幕(如HTC One X):
KIVY_DPI=320 KIVY_METRICS_DENSITY=2 python main.py --size 1280x720
或者中等密度(如摩托罗拉Droid 2):
KIVY_DPI=240 KIVY_METRICS_DENSITY=1.5 python main.py --size 854x480
你也可以通过以下方式模拟用户对字体缩放比例的替代偏好设置:
KIVY_METRICS_FONTSCALE=1.2 python main.py
- kivy.metrics.Metrics: MetricsBase = <kivy.metrics.MetricsBase object>¶
存储窗口缩放因子的metrics对象。
在 1.7.0 版本加入.
- class kivy.metrics.MetricsBase(**kwargs)[源代码]¶
-
包含 Metrics 默认属性的类。请勿直接使用此类,而应使用 Metrics 实例。
- cm: float¶
将厘米转换为像素的缩放因子。
cm是一个AliasProperty,包含该因子。例如在 KV 中:width: self.texture_size[0] + 10 * Metrics.cm当屏幕配置变化导致cm改变时,宽度会相应更新。
- density: float¶
屏幕的密度。
该值在桌面平台上默认为1,但在Android上会根据屏幕不同而变化。
density是一个AliasProperty,可以设置以更改其值。但是,如果我们从 Window 获取density,并且 Window 的density发生变化,那么density会被重新加载并重置。
- dp: float¶
将密度无关像素转换为像素的缩放因子。
dp是一个AliasProperty,包含该因子。例如在 KV 中:width: self.texture_size[0] + 10 * Metrics.dp当屏幕配置变化导致dp改变时,宽度会相应更新。
- dpi: float¶
屏幕的DPI。
根据平台的不同,DPI可以从窗口提供者(主要是桌面端)或特定于平台的模块(如android/ios)中获取。
dpi是一个AliasProperty,可以设置以改变其值。但是,如果我们从 Window 获取density,并且 Window 的dpi发生变化,那么density会被重新加载并重置。
- dpi_rounded: int¶
返回屏幕的
dpi,四舍五入到最接近的120、160、240或320。dpi_rounded是一个AliasProperty,当dpi发生变化时会更新。
- fontscale: float¶
字体缩放用户偏好。
该值默认为1,但可在0.8至1.2之间变化。
fontscale是一个AliasProperty,可以设置它来改变该值。
- inch: float¶
将英寸转换为像素的缩放因子。
inch是一个AliasProperty,包含该因子。例如在 KV 中:width: self.texture_size[0] + 10 * Metrics.inch当屏幕配置变化导致inch改变时,宽度将自动更新。
- mm: float¶
将毫米转换为像素的缩放因子。
mm是一个AliasProperty,包含该因子。例如在 KV 中:width: self.texture_size[0] + 10 * Metrics.mm当屏幕配置变化导致mm改变时,宽度会随之更新。
- pt: float¶
将点转换为像素的缩放因子。
pt是一个AliasProperty,包含该因子。例如在 KV 中:width: self.texture_size[0] + 10 * Metrics.pt当屏幕配置变化导致pt改变时,宽度会相应更新。
- sp: float¶
将比例无关像素转换为像素的缩放因子。
sp是一个AliasProperty,包含该因子。例如在 KV 中:width: self.texture_size[0] + 10 * Metrics.sp会在屏幕配置变化导致sp改变时更新宽度。
- kivy.metrics.dpi2px(value, unicode ext) float¶
根据扩展名转换值。