最新最全文章(2018-08-25):https://blog.csdn.net/fesdgasdgasdg/article/details/82054971

之前写过一篇文章《Android屏幕适配dp、px两套解决办法》介绍两种方式做屏幕UI适配,主要讲的是dp方式。

还有一篇更详细的ppt文档解析dp方式适配的原理(csdn下载需要积分,系统搞的鬼,没积分去下载就直接Q我吧)。

不用怀疑dp方式的可行性,我做过实验,并且在我带过的两家大公司实践过,得到了认可。

dp方式适配的java源码地址:https://github.com/mengzhinan/PhoneScreenMatch  自己去研究吧,很简单。

 

复述原理:

 

如果你发现你手机的widthDP值(widthPixels / density)是411.948dp,怎么办?那就取整411,千万别取412。因为系统是往下寻找对应的值(如果你写成values-w412dp,则与values-w411.948dp不匹配,系统会寻找小点的,比喻找到了比下一个values-w392dp的dimens.xml文件,那就差很远了)。

此时,如果你写个按钮,layout_width="411dp",就几乎宽度沾满屏幕了,但是还有一点点边线,那点边线的宽度是0.948dp,可以忽略。

也就是你把按钮的layout_width值给@dimen/dp_360,系统会去寻找res/values-w411dp/dimens.xml文件的dp_360变量的值,其实这个值就是411dp。

故,你只要认为任何手机的宽度都是dp_360这个变量,即可。要适配什么widthDP的手机,只需要在生成对应的dimens文件,res/values-wXXXXdp/dimens.xml。即可完成不同尺寸的手机上app的UI不变形,等比缩放的效果。

建议美工给1080x720的图,因为720/2即360,比喻,给了一个按钮width是90px,那么就给@dimen/dp_45的值,方便计算。

如果美工给的是1920x1080的图呢?1080/3=360。

 

 

 

那么怎么使用呢,往下看:

1、需要的文件。

需要在项目对应module下存在一个dimens.xml、screenMatchDP.jar和screenMatchDP.bat三个文件,dimens.xml文件不要更名,否则找不到。

后面的jar文件也不要更名,如果真要改,记得把bat文件中对应的内容也修改。bat文件就是一个windows的批处理文件,调用java -jar命令。

这些文件随便你放在哪个module下,但是相对的路径别错了,

dimens.xml路径:   ..../res/values/dimens.xml

screenMatchDP.jar:这个文件与res目录同层级

screenMatchDP.bat:这个文件与res目录也同层级

 

好了,废话这么多,就是怕你不会用。

最新的bat jar 和xml文件去github下载吧:https://github.com/mengzhinan/PhoneScreenMatch

 

2、dimens.xml文件内容格式。

建议dimens.xml文件中如屑定义dimen值:

 

-10dp-8dp-1dp0dp0.1dp0.5dp1dp2.5dp3dp4.5dp

 

 

 

负值变量名:dp_m_xxx

带小数的变量名:dp_xxx_xxx。如果写成dp_xxx.xxx时,在java类中引用会报错的。

如果是0.1的变量名:dp_0_1

 

总之,建议dp变量名定义为 dp_xxx,sp的定义为  sp_xxx。简单明了。如果你非要别样定义也随便,如果出问题了自己去修改源码,自己去用Eclipse打包jar包即可。

你可以去我的博客或者源码中copy我默认提供的一套dimens值,免得你自己一个一个写。

 

3、解析bat文件内容和设置。

 

@echo off:: Call java jar file to make dimens.xml files.:: After screenMatchDP.jar,the first param is base dp.:: And stitching the parameters that you need to fit later.:: For example:java -jar screenMatchDP.jar 360 411 480:: Default dps is 384 392 400 410 411 480 533 592 600 640 662 720 768 800 811 820 960 961 1024 1280 1365@java -jar %~dp0\screenMatchDP.jar 360@rem "If you are not want to make some dimens.xml files below: "@echo Be deleting files of 1365dp ...@rmdir /q /s .\res\values-w1365dp@echo Delete complete!pause

 

 

 

核心代码就两行:

java -jar %`dp0\screenMatchDP.jar 360

后面的360位基准dp值,也可以不写

写法1:

java -jar %`dp0\screenMatchDP.jar   默认以手机width 为360dp基准,

默认适配384 392 400 410 411 480 533 592 600 640 662 720 768 800 811 820 960 961 1024 1280 1365  等手机width的dp值。

 

写法2:

如果你想适配653dp和668dp宽度的手机,请写成:java -jar %`dp0\screenMatchDP.jar 360 653 668

第一个值为基准值,后面的为待适配的值。其实这么调用jar文件,是调用main函数,String[] args参数接收值,理解吗?看我的源码这么处理这个数组的吧。

 

补充:

因为我默认适配了一堆的值,都是个人经验的积累。如果你觉得不需要,则可删除,比喻你想删除1365  1280两个的dimens.xml适配文件:

@rmdir /q /s .\res\values-w1280dp

@rmdir /q /s .\res\values-w1365dp

完事,强制删除目录的代码。免得你每次手动删除,还骂我。

 

4、运行。

在硬盘上找到这个bat文件(不要在AS中双击打开,那只是查看文件内容,编辑)。双击执行即可,显示内容如下:

 

 

 

再去看看你的res目录下面结果:

 

生成了,这不是你想要的吗?!  很简单。

 

 

 

 

 

 

 

 

更多相关文章

  1. android中的下载问题
  2. 神奇的 Magisk
  3. Android的4种文件类型
  4. Android之SQLite数据库使用
  5. Android(安卓)ApiDemos示例解析(147):Views->Layouts->LinearLay
  6. android学习笔记之AIDL
  7. 横竖屏切换【Android】
  8. 有关于android屏幕横屏竖屏设置的问题
  9. ubuntu下整合eclipse和javah生成jni头文件开发android的native程

随机推荐

  1. 填充Listview第一个Item的分隔线
  2. Android(安卓)MID BootSound
  3. android + Spring RESTful 简单登录
  4. android开发过程遇到的问题和解决方案(不
  5. Android Timer的用法示例
  6. Android(安卓)ScrollView嵌套Webview(实
  7. android adb配置
  8. Android:UI更新方法四:在Worker Thread中
  9. Android 代码设置来电铃声
  10. Android应用程序显示欢迎画面并开机自启