利用Android 防止系统字体变化、显示大小变化影响

 更新时间:2021年10月22日 16:39:22   作者:xiangxiongfly915  
这篇文章主要介绍了利用Android 防止系统字体变化、显示大小变化影响方法的相关资料,需要的朋友可以参考下面文章的具体内容,希望对你有所帮助

1、当系统字体变大时

Activity

Fragment

当系统字体放大后,文字设置为sp的也跟随放大,设置为dp的则保存不变。
设置为sp的该如何修改呢?

2、解决办法

  • 使用dp单位
  • Activity中设置getResources()

可以在BaseActivity统一处理

@Override
public Resources getResources() {
    Resources resources = super.getResources();
    if (resources != null &&    resources.getConfiguration().fontScale != 1.0f) {
        android.content.res.Configuration configuration =    resources.getConfiguration();
        configuration.fontScale = 1.0f;
        resources.updateConfiguration(configuration, resources.getDisplayMetrics());
    }
    return resources;
}

3、当显示大小变大时

4、解决办法

4.1 工具类

public class DisplayUtil {
    private static final String TAG = DisplayUtil.class.getSimpleName();

    /**
     * 系统设置"显示大小"时原有UI样式保持不变:
     * <p>
     * 1、当调节手机系统"显示大小"【调大】的时候,相应的dpi会变大【dp = (dpi/160) * px】,此时dp就会变大,所以相应的UI布局就会变大。
     * 2、当调节手机系统"分辨率"【调小】的时候,相应的dpi会变小【比如由480-->320】。如果此时使用技术手段使dpi保持不变,那么相同的dp就会占用更多的px,所以UI布局就会变大。
     *
     * @param context
     */
    public static void setDefaultDisplay(Context context) {
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
            Configuration origConfig = context.getResources().getConfiguration();
            //获取手机出厂时默认的densityDpi【注释1】
            origConfig.densityDpi = getDefaultDisplayDensity();

            context.getResources().updateConfiguration(origConfig, context.getResources().getDisplayMetrics());
        }
    }

    public static int getDefaultDisplayDensity() {
        try {
            Class clazz = Class.forName("android.view.WindowManagerGlobal");
            Method method = clazz.getMethod("getWindowManagerService");
            method.setAccessible(true);
            Object iwm = method.invoke(clazz);
            Method getInitialDisplayDensity = iwm.getClass().getMethod("getInitialDisplayDensity", int.class);
            getInitialDisplayDensity.setAccessible(true);
            Object densityDpi = getInitialDisplayDensity.invoke(iwm, Display.DEFAULT_DISPLAY);
            return (int) densityDpi;
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }
}

Activity#setContentView()之前调用DisplayUtil.setDefaultDisplay(this) ;

到此这篇关于利用Android 防止系统字体变化、显示大小变化影响的文章就介绍到这了,更多相关Android 防止系统字体变化、显示大小变化影响内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android实现双向滑动特效的实例代码

    Android实现双向滑动特效的实例代码

    这篇文章主要介绍了Android实现双向滑动特效的实例代码,具有很好的参考价值,希望对大家有所帮助,一起跟随小编过来看看吧
    2018-05-05
  • Android 自定义View手写签名并保存图片功能

    Android 自定义View手写签名并保存图片功能

    这篇文章主要介绍了Android 自定义View手写签名并保存图片功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2020-03-03
  • 常见Android编译优化问题梳理总结

    常见Android编译优化问题梳理总结

    这篇文章主要介绍了常见Android编译优化问题梳理总结,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Android加载Gif动画实现代码

    Android加载Gif动画实现代码

    这篇文章主要为大家详细介绍了Android加载Gif动画实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • android UI绘制加减号按钮

    android UI绘制加减号按钮

    这篇文章主要为大家详细介绍了android UI绘制加减号按钮,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • Android BottomNavigationView与Fragment重建与重叠问题解决方法探索

    Android BottomNavigationView与Fragment重建与重叠问题解决方法探索

    这篇文章主要介绍了Android BottomNavigationView与Fragment重建与重叠问题解决,总的来说这并不是一道难题,那为什么要拿出这道题介绍?拿出这道题真正想要传达的是解题的思路,以及不断优化探寻最优解的过程。希望通过这道题能给你带来一种解题优化的思路
    2023-01-01
  • 详解Android应用main函数的调用

    详解Android应用main函数的调用

    Android常识,App主线程初始化了Looper,调用prepare的地方是ActivityThread.main函数。问题来了,App的main函数在哪儿调用,下面我们来一起学习一下吧
    2019-06-06
  • Android中自定义水平进度条样式之黑色虚线

    Android中自定义水平进度条样式之黑色虚线

    这篇文章主要介绍了Android中自定义水平进度条样式之黑色虚线 的相关资料,需要的朋友可以参考下
    2016-03-03
  • 安卓(Android) 监听按键长按事件

    安卓(Android) 监听按键长按事件

    本文主要介绍Android 中监听按键的长按事件,对按键机制进行详解,并附有代码实例,具有参考价值,希望能帮到有需要的小伙伴
    2016-07-07
  • 使用adb命令从电脑传文件到手机(传文件)

    使用adb命令从电脑传文件到手机(传文件)

    很多朋友纠结使用adb命令从电脑传文件到手机可以吗,使用adb命令从电脑传文件到手机可以吗安全吗?答案在本文中,对adb命令传输文件到手机或者从手机传文件到电脑相关知识感兴趣的朋友一起通过本文学习吧
    2022-11-11

最新评论