
- This code defines extension functions to convert between dp, sp, and px.
- It relies on density (for dp) and scaledDensity (for sp) extracted from Android’s DisplayMetrics.
- The goal is to keep UI elements visually consistent across devices with different screen densities.
🧑🏻💻 Why These Conversions Matter (Foundation)
Screen Density Model
+---------------------------------------------+
| density → converts dp ↔ px |
| scaledDensity → converts sp ↔ px (font size)|
+---------------------------------------------+
- dp: density-independent pixels
- sp: scale-independent pixels (respects user font size setting)
- px: raw physical pixels
density and scaledDensity come from:
resources.displayMetrics
This ensures the UI scales correctly across devices.
🧑🏻💻 Key Conversion Logic
1. dp → px
Formula: px = dp × density
dpToPx(dp) = dp.value * density
2. dp → sp
( dp → px → sp )
Formula: sp = dp × density ÷ scaledDensity
dpToSp(dp) = (dp.value * density / scale).sp
3. px → dp
Formula: dp = px ÷ density
toDp(px) = (px / density).dp
4. px → sp
Formula: sp = px ÷ scaledDensity
toSp(px) = (px / scale).sp
5. sp → dp
Formula: dp = sp × scaledDensity ÷ density
spToDp(sp) = (sp.value * scale / density).dp
6. sp → px
Formula: px = sp × scaledDensity
spToPx(sp) = sp.value * scale
7. Type-Specific Extensions
The code also adds natural calling styles:
Dp.toPx(context)
Float.toDp(context)
TextUnit.toPx(context)
TextUnit.toDp(context)
These simply delegate to the Context converters and make the API flexible.
🧑🏻💻 Visualization — Full Conversion Map
+------------------+ +------------------+
| Dp | <------> | px |
| (dp.value) | | (Float) |
+------------------+ +------------------+
| ^
| dpToSp / spToDp |
v |
+------------------+ +------------------+
| Sp | <------> | scaled px |
| (TextUnit.sp) | | (scaledDensity) |
+------------------+ +------------------+
🧑🏻💻 Notes & Caveats
- scaledDensity changes when users adjust system font size.
- Jetpack Compose usually hides px conversions, but you still need px for:
- Custom drawing
- Canvas operations
- Bitmap sizing
- Expert consultation recommended for deeply understanding DPI internals in OEM-modified environments.
🧑🏻💻 References
👉 dp / px / sp 完全相互変換
👉 DisplayMetrics | API reference | Android Developers
👉 各種のピクセル密度をサポートする | Compatibility | Android Developers
Related Categories : Android・AndroidStudio・Developmemt・Kotlin・Newbie・Recommended