New in version 1.5.0.
A screen is defined by its physical size, density and resolution. These factors are essential for creating UI’s with correct size everywhere.
In Kivy, all the graphics pipelines work with pixels. But using pixels as a measurement unit is problematic because sizes change according to the screen.
If you want to design your UI for different screen sizes, you will want better measurement units to work with. Kivy provides some more scalable alternatives.
Here is an example of creating a label with a sp font_size and setting the height manually with a 10dp margin:
#:kivy 1.5.0 <MyWidget>: Label: text: 'Hello world' font_size: '15sp' size_hint_y: None height: self.texture_size + dp(10)
Manual control of metrics¶
The metrics cannot be changed at runtime. Once a value has been converted to pixels, you can’t retrieve the original value anymore. This stems from the fact that the DPI and density of a device cannot be changed at runtime.
We provide some environment variables to control metrics:
- KIVY_METRICS_DENSITY: if set, this value will be used for density instead of the systems one. On android, the value varies between 0.75, 1, 1.5 and 2.
- KIVY_METRICS_FONTSCALE: if set, this value will be used for fontscale instead of the systems one. On android, the value varies between 0.8 and 1.2.
- KIVY_DPI: if set, this value will be used for dpi. Please note that setting the DPI will not impact the dp/sp notation because these are based on the screen density.
For example, if you want to simulate a high-density screen (like the HTC One X):
KIVY_DPI=320 KIVY_METRICS_DENSITY=2 python main.py --size 1280x720
Or a medium-density (like Motorola Droid 2):
KIVY_DPI=240 KIVY_METRICS_DENSITY=1.5 python main.py --size 854x480
You can also simulate an alternative user preference for fontscale as follows:
KIVY_METRICS_FONTSCALE=1.2 python main.py
- kivy.metrics.Metrics = <kivy.metrics.MetricsBase object at 0x95c4d6c>¶
Default instance of MetricsBase, used everywhere in the code .. versionadded:: 1.7.0
- class kivy.metrics.MetricsBase¶
Class that contains the default attributes for Metrics. Don’t use this class directly, but use the Metrics instance.
Return the density of the screen. This value is 1 by default on desktops but varies on android depending on the screen.
Return the DPI of the screen. Depending on the platform, the DPI can be taken from the Window provider (Desktop mainly) or from a platform-specific module (like android/ios).
Return the DPI of the screen, rounded to the nearest of 120, 160, 240 or 320.
Return the fontscale user preference. This value is 1 by default but can vary between 0.8 and 1.2.
Convert from points to pixels
Convert from inches to pixels
Convert from centimeters to pixels
Convert from millimeters to pixels
Convert from density-independent pixels to pixels
Convert from scale-independent pixels to pixels