如题所示。我们不啰嗦。直接上源码:
写一个工具类
/**
* 修改字体帮助类
*/
object DispUtility {
/**
* 禁用7.0(23)以上
* app内的视图和文字大小随系统视图和文字大小的改变而改变
*/
@JvmStatic
fun disabledDisplayDpiChange(res: Resources): Resources {
val newConfig = res.configuration
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { //字体非默认值
if (res.configuration.fontScale != 1f) {
newConfig.fontScale = 1f
}
newConfig.densityDpi = defaultDisplayDensity
res.updateConfiguration(newConfig, res.displayMetrics)
} else { //字体非默认值
if (res.configuration.fontScale != 1f) {
newConfig.fontScale = 1f //设置默认
res.updateConfiguration(newConfig, res.displayMetrics)
}
}
return res
}
/**
* 获取手机出厂时默认的densityDpi
*/
private val defaultDisplayDensity: Int
@SuppressLint("PrivateApi")
get() = try {
val aClass = Class.forName("android.view.WindowManagerGlobal")
val method = aClass.getMethod("getWindowManagerService")
method.isAccessible = true
val iwm = method.invoke(aClass)
val getInitialDisplayDensity = iwm.javaClass.getMethod("getInitialDisplayDensity", Int::class.javaPrimitiveType)
getInitialDisplayDensity.isAccessible = true
val densityDpi = getInitialDisplayDensity.invoke(iwm, Display.DEFAULT_DISPLAY)
densityDpi as Int
} catch (e: Exception) {
e.printStackTrace()
-1
}
}
然后在我们的BaseActivity里面添加这行引用代码 就行了
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(layoutResId)
DispUtility.disabledDisplayDpiChange(this.resources)
initUI()
initData()
}
参考的链接:
https://blog.csdn.net/duyiqun/article/details/96976197
https://blog.csdn.net/sunshine199221/article/details/72765931