今日头条适配方案心得

发布时间:2021-11-30 06:43:24

目的:搞成和设计图一样的比例,适配的终极目的就是按比例适配


再来几个公式:


?


px = density * dp;


?


density = dpi / 160;


?


px = dp * (dpi / 160);


dp:在每英寸160点的显示屏上,1dp = 1px,即px = dp(dpi / 160)


dp = px/dpi*160


dpi(Dots Per Inch):每英寸的点数,也称像素密度,即屏幕对角线像素值÷英寸值。



所以像素点的大小=每英寸/每英寸的像素点数=1/dpi英寸,所以在改变dpi的时候就是在改变像素点的大小


例:720x1280分辨率5.7英寸的手机:



?


今日头条最终:在某些条件下保证比例相等例(成比例):


注意这个比例相等是指控件在设备上的大小和设备的比例,在不同设备上相同,同时也和设计图上的控件和设计图的比例相等。
在两个设备的总dp值相等时,可以达到等比例的效果(猜测一开始谷歌也是想在出产手机的时候也按这个标准),所以今日头条就改变density来使总dp值相等来达到比例适配。


那为什么两个设备的dp值相等了就成比例了呢?


只有我们开发时用的是dp,那两个设备的dp值相等时才能达到了成比例的效果,我们设置1dp就是整个设备的1/dp值,例如设备的dp值是360dp,因为dp和长度挂钩,那1dp就是1/360设备的长度.


?


今日头条的做法是在同一个dp值下如360dp,改变density的值,因为屏幕宽度是固定的所以通过改变density的值来使设备的dp值为同一个值。


按照上述公式:


px = density * dp;


density = dpi / 160;


改变density其实就是在改变dpi。


以上是今日头条适配的实质,用法:https://blog.csdn.net/cmyperson/article/details/83112926


?


下面的问题还没有想清楚。


Px (Pixel像素)


px的大小 =每英寸/每英寸的像素点数=1/dpi英寸,所以在改变dpi的时候就是在改变像素点的大小
也称为图像元素,是作为图像构成的基本单元,单个像素的大小并不固定,跟随屏幕大小和像素数量的关系变化(屏幕越大,像素越低,单个像素越大,反之亦然)。所以在使用像素作为设计单位时,在不同的设备上可能会有缩放或拉伸的情况。


dp的推出解决了什么问题。


1.在理想情况下:dp能保证在不同设备上尺寸相等(前提是dpi是物理dpi不是Google给的规定dpi,只有dpi是物理dpi才能保证dp在不同设备上尺寸相等),如果各大厂商都按照一个尺寸(必须一个尺寸)去生产设备,并且dpi是物理实际api(在现实中并不是物理dpi,而是Google给了一个范围规定,下面给出),很简单的就达到了适配效果,因为屏幕尺寸固定,dp的尺寸也固定。


2.dp为什么能够保证在不同设备上尺寸相等


理论:


1dp的尺寸=像素点大小*1dp的像素数 经过公式变换也就是:像素点的大小*(dp值*dpi的值/160)=1/dpi*(1dp*dpi/160)=1/160


这个公式成立的前提是dpi是真实的物理dpi


例子:


我们知道了:dpi是每英寸像素点数,px是像素点数,那我有60px的实际物理长度不就是(60/dpi)英寸嘛,1px的实际长度就是 1/dpi 英寸咯。可以得到公式:长度 L(英寸) = px /??dpi。手机的dpi不同,那1px的物理长度其实就不同。


?dip其实为了达到展示一样物理长度才弄出来的一个概念,最后还是需要转换成像素来显示的。


为了让每部手机上dip都显示一样物理长度,那只需要dip和px转换满足关系:dip = n * px /dpi (n > 0)。那么


px = dip * dpi / n。设备通过这样的对应关系来决定显示的像素值,这样显示出的像素值不同,而保证物理长度相同了。


我们来算一下看。比如20dip的长度:先计算20dip对应的px为20 * dpi /n,物理长度为 px / dpi = (20 * dpi / n) /dpi = 20/n(英寸)。n是一个固定值,那么对于所有设备来说, 20 dip都会显示成 20/n 英寸长的像素。



Android将这个n值定为160。这个值设为160,是因为第一款Android设备(HTC的T-Mobile G1)是属于160dpi。


那么,当设备dpi为160时,1px = 1dip。
?


3.什么是物理dpi,什么是Google给的dpi有什么影响


dpi的定义上面写的很清楚,算法也是给出一个例子:


我们以一个 4.95 英寸 1920 * 1080 的 nexus5 手机设备为例:


计算:物理dpi,用这个实际设备计算的物理dpi是能保证dp的长度固定的。


    计算直角边像素数量: 19202+10802=2202^2(勾股定理)。计算 DPI:2202 / 4.95 = 445。得到这个设备的 DPI 为 445 (每英寸的距离中有 445 个像素)。

计算:dp


先明白一个概念,所有显示到屏幕上的图像都是以 px 为单位。Dip 是我们开发中使用的长度单位,最后他也需要转换成 px。计算这个设备上 1dip 等于多少 px:
px = dip x dpi /160
px = 1 x 445 / 160 = 2.78通过上面的计算可以看出在此设备上 1dip = 2.78px,那么这是一个真实的故事吗? nonono,其中的关键值 dpi 并不是我们算出来的 445 ,请往下看。
Android 系统定义的 Dpi

上面计算的 445Dpi 是在 4.95 英寸下的 1920*1080 手机,那如果是 4.75 分辨率下的呢? 4.55 分辨率下的呢?。。。。可见是很麻烦的,同一个分辨率在不同的屏幕尺寸上 Dpi 也不相同。为了省事,解决这个问题, Android 中内置了几个默认的 Dpi ,在特定的分辨率下自动调用,也可以手动在配置文件中修改。


?ldpimdpihdpixhdpixxhdpi
分辨率240x320320x480480x800720x12801080x1920
系统dpi120160240320480
基准比例0.7511.523

这是内置的 Dpi ,啥意思? 在 1920*1080 分辨率的手机上 默认就使用 480 的 dpi ,不管的你的尺寸是多大都是这样。


说到底,因为有dpi这个动态的系数,我们在使用dp的时候才能兼容不同分辨率的设备。


到这里,应该都明白了 dpi 的由来,以及系统 dpi 跟物理 dpi 并不一定相同。在系统中使用的全部都是系统 dpi,没有使用物理 dpi,也获取不到物理 dpi。物理 dpi 主要用于厂家对于手机的参数描述(也可以看做 ppi )!


?


?


引申问题dp为什么是一个物理单位又不是一个物理单位?


物理单位的定义是一个单位长度是固定的。
是物理单位:在理想的状态下大家如果都按照:Google最开始的制造标准?(使用物理dpi)去出产手机那每个dp的长度是固定的1/160确实是一个物理长度单位
不是物理单位:因为手机系统使用的的dpi并不是物理dpi,所以dp的长度不再固定所以就不能说dp是一个物理长度单位


?


参考资料:


https://www.jianshu.com/p/5678f23faed3


强烈建议看这篇文章: https://www.jianshu.com/p/cd66b7e01d4a


https://www.cnblogs.com/H-BolinBlog/p/5647548.html


今日头条屏幕适配方案

相关文档

  • 建党91周年学生演讲稿:弘扬民族精神
  • Android 调用谷歌语音识别
  • 学校电教工作计划范例
  • Codeforces - 1106D. Lunar New Year and a Wander(图简单题)
  • 单相单位功率因数整流simulnk仿真
  • 安装建设公司金属结构公司简介钢结构部分
  • 第二军医大学2021应用心理硕士专业基础简介
  • win8.1怎么激活
  • 便常规_“常规”还是“标新”?作文
  • 行政文员毕业实习自我鉴定
  • 基于Qt的音乐播放器设计与实现
  • 留些笑容在心中
  • 八年级地理考卷及答案
  • 2019事业单位入党申请格式
  • Appium-移动端自动化测试-PageObject设计模式的优化
  • 家长座谈会记录优选20篇
  • 执着束缚了我们
  • 2020年初一新学期班主任工作计划
  • 一张善变的脸
  • 小米手机的账号密码忘记了怎么办
  • 怎样用酱油腌蒜?美女厨师帮到你
  • 家园消失了
  • 搞笑婚礼主持词开场白怎么说
  • 静脉血栓 “世界血栓日“背景
  • 爬虫实习日志
  • 三年级数学速算与巧算训练试题精选
  • 普林斯顿校长2018演讲:读书无用是最大的谎言
  • 创业板公司退市制度的影响
  • Android相机(摄像头)圆形预览窗口,圆形SurfaceView
  • 小学生学期个人评语
  • 猜你喜欢

  • 白醋蜂蜜擦脸有什么功效
  • 创新社会管理与深化体制机制改革ppt课件
  • 关于社区干部竞选演讲稿
  • 广东省河源市源音像器材有限公司企业信息报告-天眼查
  • 隐裂牙综合治疗60例临床疗效观察
  • 给办结婚证爸妈不同意怎么办
  • 水利工程混凝土施工中后张法的运用与特征分析
  • 工作邀请函
  • 一定要记住农村这几种野菜,能治大病 ;有些人还不知道!
  • 复*困惑 Microsoft Word 文档1
  • 玉林云天宫
  • 取汉字拼音首字符的Function
  • 教育最新K12福建省莆田市第六中学2018届高三物理上学期期中试题(含解析)
  • 婴儿补脑的好方法 麦宝有妙招
  • 期末总结表彰大会主持词
  • 九年级物理全册 第18章 第1节 电能电功教案 (新版)新人教版
  • 怎么样才能生儿子 史上最简单可行的怀儿子方法
  • 【精品】小学体育论文:小学体育游戏教学论文第五篇_通用版
  • 2015年四川省监理工程师执业资格:工程师的口头指示考试试题
  • 26.1.3_函数y=ax2+k_的图象和性质
  • 小学生吃零食的危害 主题班会
  • 互联网创业项目怎么运营
  • 苍穹变戒指进阶必备攻略 戒指进阶方法说明
  • 最新-最新农村社区警务建设工作总结 精品
  • 小学三年级备课组工作计划
  • 中小学作文素材:读《蜜蜂颂》有感400字
  • 北京咪豆阳光礼品中心企业信用报告-天眼查
  • 简单的二手房购房合同范本
  • 如何更改 yocto 工程中 qt 的版本
  • 探讨油品质量检验误区及相关注意事项
  • 小学1-6年级*义词反义词大全演示教学
  • 胃不好吃了韭菜很难受如何缓解一下吗
  • 人教版小学数学五年级下册:探索图形 课时练*
  • 苏教版九年级语文上册第二单元8 多收了三五斗 教案
  • 担保公司分类与实务_财务管理_经管营销_专业资料-文档资料
  • 热爱生活,热爱写作
  • 上海格轩装饰工程有限公司企业信用报告-天眼查
  • 罗本假摔引吐槽哥斯达黎加队晋级推动旅游业
  • 育儿知识-养孩子得花多少钱?香港得用550万
  • 工作心得:引入“利益法益观”推动金融刑法更新(最新)
  • 人教最新审定版小学二年级数学下册第二单元表内除法_2.2除法的初步认识精品ppt课件
  • 越长大越孤单的伤感爱情句子
  • 电脑版