package com.xw.common.utils
|
|
import android.app.Activity
|
import android.app.Application
|
import com.xw.common.utils.LogUtils
|
|
class ScreenAdaptationUtil {
|
|
companion object {
|
|
var TAG = "ScreenAdaptationUtil"
|
|
// 系统初始适配值
|
private var systemDefaultDensity = 0f
|
private var systemDefaultDensityDpi = 0
|
private var systemDefaultScaledDensity = 0f
|
|
@JvmStatic
|
fun setCustomDensity(activity: Activity, application: Application) {
|
setCustomDensity(activity, application, 375f)
|
}
|
|
fun setCustomDensity(activity: Activity, application: Application, designDp: Float) {
|
/**
|
* android中适配的单位换算值
|
* px = density * dp;
|
* density = dpi / 160;
|
* px = dp * (dpi / 160);
|
*
|
* dpi是根据屏幕真实的分辨率和尺寸来计算的,每个设备都可能不一样的。
|
*
|
* dpi= (宽平方 + 高平方) 开根 / 屏幕尺寸
|
*
|
*/
|
val displayMetrics = application.resources.displayMetrics
|
if (systemDefaultDensity == 0f) {
|
systemDefaultDensity = displayMetrics.density
|
}
|
if (systemDefaultDensityDpi == 0) {
|
systemDefaultDensityDpi = displayMetrics.densityDpi
|
}
|
if (systemDefaultScaledDensity == 0f) {
|
systemDefaultScaledDensity = displayMetrics.scaledDensity
|
}
|
|
var fc = activity.resources.configuration.fontScale
|
fc = 1f // 强制字体大小不随系统
|
|
/**
|
* 此处以540dp的设计图作为例子 此处需要加上f int / int 得值 int 会导致适配有变形
|
*/
|
val targetDensity = displayMetrics.widthPixels / designDp
|
val targetScaledDensity = targetDensity * (systemDefaultScaledDensity / fc / systemDefaultDensity)
|
val targetDensityDpi = (160 * targetDensity).toInt()
|
displayMetrics.density = targetDensity
|
displayMetrics.scaledDensity = targetScaledDensity
|
displayMetrics.densityDpi = targetDensityDpi
|
val activityDisplayMetrics = activity.resources.displayMetrics
|
activityDisplayMetrics.density = targetDensity
|
activityDisplayMetrics.scaledDensity = targetScaledDensity
|
activityDisplayMetrics.densityDpi = targetDensityDpi
|
}
|
|
/**
|
* 取消屏幕适配
|
*
|
* @param activity
|
* @param application
|
*/
|
@JvmStatic
|
fun restoreCustomDensity(activity: Activity, application: Application) {
|
if (systemDefaultDensity == 0f || systemDefaultScaledDensity == 0f || systemDefaultDensityDpi == 0) { // LogUtils.e(TAG, "重置失败,系统初始适配值错误")
|
return
|
}
|
val displayMetrics = application.resources.displayMetrics
|
displayMetrics.density = systemDefaultDensity
|
displayMetrics.scaledDensity = systemDefaultScaledDensity
|
displayMetrics.densityDpi = systemDefaultDensityDpi
|
val activityDisplayMetrics = activity.resources.displayMetrics
|
activityDisplayMetrics.density = systemDefaultDensity
|
activityDisplayMetrics.scaledDensity = systemDefaultScaledDensity
|
activityDisplayMetrics.densityDpi = systemDefaultDensityDpi
|
}
|
}
|
}
|