Skip to content

Commit 0fc00cd

Browse files
committed
example: android: Fix display scaling issue on some devices
1 parent 9211e55 commit 0fc00cd

File tree

1 file changed

+19
-0
lines changed

1 file changed

+19
-0
lines changed

composeApp/src/androidMain/kotlin/top/yukonga/miuix/uitest/MainActivity.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package top.yukonga.miuix.uitest
22

33
import App
4+
import android.content.res.Resources
45
import android.graphics.Color
56
import android.os.Build
67
import android.os.Bundle
8+
import android.util.DisplayMetrics
79
import androidx.activity.ComponentActivity
810
import androidx.activity.SystemBarStyle
911
import androidx.activity.compose.setContent
@@ -12,12 +14,29 @@ import androidx.compose.foundation.isSystemInDarkTheme
1214
import androidx.compose.runtime.DisposableEffect
1315
import androidx.compose.runtime.mutableIntStateOf
1416
import androidx.compose.runtime.remember
17+
import kotlin.math.pow
18+
import kotlin.math.sqrt
1519

1620
class MainActivity : ComponentActivity() {
1721

1822
override fun onCreate(savedInstanceState: Bundle?) {
1923
super.onCreate(savedInstanceState)
2024

25+
val displayMetrics = Resources.getSystem().displayMetrics
26+
val widthPixels = displayMetrics.widthPixels
27+
val heightPixels = displayMetrics.heightPixels
28+
val widthInches = widthPixels / displayMetrics.xdpi
29+
val heightInches = heightPixels / displayMetrics.ydpi
30+
val diagonalPixel = sqrt(widthPixels.toDouble().pow(2.0) + heightPixels.toDouble().pow(2.0))
31+
val screenInches = sqrt(widthInches.toDouble().pow(2.0) + heightInches.toDouble().pow(2.0))
32+
val actualDensityDpi = diagonalPixel / screenInches
33+
val actualDensity = actualDensityDpi / DisplayMetrics.DENSITY_DEFAULT
34+
35+
val metrics = resources.displayMetrics
36+
metrics.density = actualDensity.toFloat()
37+
metrics.densityDpi = actualDensityDpi.toInt()
38+
resources.displayMetrics.setTo(metrics)
39+
2140
setContent {
2241
val colorMode = remember { mutableIntStateOf(0) }
2342
val darkMode = colorMode.intValue == 2 || (isSystemInDarkTheme() && colorMode.intValue == 0)

0 commit comments

Comments
 (0)