文章链接,之前确实没有接触过,我简单看了一遍,可以说,这也是相对比较完美的方案,我先简单说一下这个方案的思路,它是通过修改density值,强行把所有不同尺寸分辨率的手机的宽度dp值改成一个统一的值,这样就解决了所有的适配问题。

比如,设计稿宽度是360px,那么开发这边就会把目标dp值设为360dp,在不同的设备中,动态修改density值,从而保证(手机像素宽度)px/density这个值始终是360dp,这样的话,就能保证UI在不同的设备上表现一致了。

这个方案侵入性很低,而且也没有涉及私有API,应该也是极不错的方案,我暂时也想不到强行修改density是否会有其他影响,既然有今日头条的大厂在用,稳定性应当是有保证的。

但是根据我的观察,这套方案对老项目是不太友好的,因为修改了系统的density值之后,整个布局的实际尺寸都会发生改变,如果想要在老项目文件中使用,恐怕整个布局文件中的尺寸都可能要重新按照设计稿修改一遍才行。因此,如果你是在维护或者改造老项目,使用这套方案就要三思了。

具体代码实现为:

    // 今日头条的屏幕适配方案// 通过修改density值,强行把所有不同尺寸分辨率的手机的宽度dp值改成一个统一的值,这样就解决了所有的适配问题// @param activity// @param applicationprivate static float sNoncompatDensity;private static float sNoncompatScaledDensity;public static void setCustomDensity(@NonNull Activity activity, @NonNull final Application application){DisplayMetrics appDisplayMetrics=application.getResources().getDisplayMetrics();if (sNoncompatDensity==0){sNoncompatDensity=appDisplayMetrics.density;sNoncompatScaledDensity=appDisplayMetrics.scaledDensity;application.registerComponentCallbacks(new ComponentCallbacks() {@Overridepublic void onConfigurationChanged(Configuration newConfig) {if (newConfig!=null&&newConfig.fontScale>0){sNoncompatScaledDensity=application.getResources().getDisplayMetrics().scaledDensity;}}@Overridepublic void onLowMemory() {}});}float targetDensity=appDisplayMetrics.widthPixels/360;float targetScaleDensity=targetDensity*(sNoncompatScaledDensity/sNoncompatDensity);int targetDensityDpi=(int)(160*targetDensity);appDisplayMetrics.density=targetDensity;appDisplayMetrics.scaledDensity=targetScaleDensity;appDisplayMetrics.densityDpi=targetDensityDpi;final DisplayMetrics activityDisplayMetrics=activity.getResources().getDisplayMetrics();activityDisplayMetrics.density=targetDensity;activityDisplayMetrics.scaledDensity=targetScaleDensity;activityDisplayMetrics.densityDpi=targetDensityDpi;}

今日头条的安卓适配方案,值得收藏相关推荐

  1. 今日头条适配方案_今日头条信息流广告创意优化方案!

    今日头条信息流广告创意优化方案! 时段设置常见错误: 投放时段选取过窄导致展现量低, 优质时段出价无竞争力导致展现量低 时段设置方法: 依据广告主产品或服务目标受众在推广平台上的活跃时间来设定; 根据 ...

  2. 今日头条App 页面秒开方案详解

    热文导读|   点击标题阅读 互联网寒冬下,程序员如何突围提升自己? Google发力了,Flutter突飙猛进,在鸿蒙OS的威胁下,FuchsiaOS API也发布了 全网第一篇整理的Flutter ...

  3. 今日头条Android适配方案,android 今日头条的屏幕适配理解

    前一段时间无意中看到今日头条的适配方案,使用到项目中,感觉真的是无比丝滑.所以特意写一篇文章分享给小伙伴们! 本文知识点: 为什么要做屏幕适配 今日头条的适配方案(划重点) 今日头条的适配方案的一些问 ...

  4. 今日头条2018安卓实习笔试题

    好多天前做的头条,今日补上博客. 第一题 题意 在n个元素的数组中,找到差值为k的数字对去重后的个数. 输入描述: 第一行包含两个正整数,n和k,n表示数字个数,k表示差值. 第二行,n个正整数 输出 ...

  5. Android 今日头条适配详解

    这篇文章是在掘金上看到的,感觉不错.怕时间长了不好找,因此就转载过来,进行保存. 原文地址:https://juejin.cn/post/6844903661819133960  原文作者:JessY ...

  6. 今日头条android自适应,今日头条解决适配(Android)

    工具类如下: /** * @param activity * @param application * @param isLandscape 是否是横屏 */ public class ScreenU ...

  7. 今日头条启动很快,你觉得可能是做了哪些优化?

    原文作者:蓝师傅_Android 原文地址:https://www.jianshu.com/p/d0fe74f4e9c4 相关阅读:深圳一普通中学老师工资单曝光,秒杀程序员,网友:敢问是哪个学校毕业的 ...

  8. 今日头条移动 APP 广告激活数据API对接实践

    作为最火的新闻app,今日头条有这很大的活跃用户群和日访问量.大流量决定了今日头条会位商品做广告. 1.如下为今日头条的广告收费方案(来自官方开发文档): 激活数是 APP 广告主衡量转化效果的重要指 ...

  9. 面试官:今日头条启动很快,你觉得可能是做了哪些优化?

    前言 网上关于启动优化的文章多不胜数,内容千篇一律,大都是列举一些耗时操作,采用异步加载.懒加载等. 而在面试过程中,关于启动优化的问题,如果只是很表面地回答耗时操作应该放在子线程,显然太过于普通,无 ...

最新文章

  1. aspose.cells 无法读取公式值_隐藏 Excel表格、公式的9种方法
  2. Pytorch中的广播机制
  3. Centos最小化装机网络问题
  4. BindingException: Parameter 'XXX' not found. Available parameters are [collection, list]
  5. 不同技术团队的配合问题及DevOps
  6. PyTorch | torch.tensor使用方法,如何使用torch.tensor
  7. 【转载】为什么要用黑莓?
  8. windows11下安装vivado2019
  9. android TextWatcher 学习
  10. Python计算股票收益率、Alpha和Beta系数
  11. matlab 四元方程求解,如何用Matlab求解如下一元四次方程,求指导
  12. 2022年最新软件测试面试题+答案解析(每日20题,持续更新中)【六】
  13. SpringCLoud+redis+es高并发项目《九》(Spring Security Oauth2 JWT)
  14. 电脑重复文件扫描工具清理:Easy duplicate finder 5.10注册破解版
  15. tomcat连接oracle报错,跪求解决在eclipse中开oracle数据库库TOMCAT报错
  16. php excel速度慢,window_win10双击打开excel太慢了的三种解决办法,win10双击打开excel文件慢该怎么 - phpStudy...
  17. 我为什么要离开传智再去创业?
  18. 真实的上海IT圈:张江男vs漕河泾男
  19. 案例-canvas绘制雨滴
  20. 【OpenHarmony】napi基本用法----HelloWorld

热门文章

  1. 自由职业者的社保缴纳问题
  2. 2018年中国(上海)国际乐器本特历奈特钢琴荣耀参展
  3. Kolmogorov–Smirnov test(K-S检验)
  4. Linux修改主机名和域名
  5. 4)date中的Ymd格式问题
  6. 如何高效地在网上找开源项目做!
  7. 程序员卖日本糖果的故事
  8. 刷题记录:牛客NC14975方块与收纳盒
  9. 【Linux】Linux中rz和sz命令用法详解
  10. 数据库创建表的时候加注释