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

“又是屏幕适配,这类文章网上不是很多了吗?”

我也很遗憾,确实又是老问题。但本文重点对网上的各种方案做一个简短的总结,和具体使用方法。

若想了解具体android设备适配的前世因果,请阅读hongyang文章:http://blog.csdn.net/lmj623565791/article/details/45460089

据我的总结,屏幕适配可以有两种方法适配,dp和px,一一讲解。

一、PX适配。

现在常用的屏幕尺寸为1280x720,一般美工也会根据这个尺寸给图。

图上标注的都是px,而android里面推荐使用的单位为dp。

相同的屏幕尺寸,不同的密度比例,可能会要用到不同的dp值。

这个转换很痛。

那么,省着点吧,对于1280x720的屏幕,我们若给宽度为720px是不是就占满屏幕了呢?对于1920x1080的屏幕,我们宽度给1080是不是就占满了你?

我们以1280x720为基准,把所有的宽度切成720份,高度切成1280份,其他的尺寸基于这个基准等比缩放。。。。。这么闹嗑真费劲,看图

对于1280x720的屏幕,宽度给x720变量的值即占满屏幕。

万一用户的手机屏幕为800x480呢?看下图:

万一是1920x1080呢?看图:

understand?根据不同的屏幕,x720变量会代表对应的px值,其他的变量也一样。dimens_y.xml文件也一样的等分了。

往下看

如上图,根据你的需要,生成需要适配的尺寸的文件,手机会根据屏幕相关参数自动寻找合适的尺寸文件的。需要执行生成适配文件夹时,找到screenMatchPX.bat文件所在的硬盘位置,双击执行该文件即可,即可在项目的res目录下生成对应的values-aaaxbbb文件夹和里面的文件数据。

screenMatchPX.jar里面的源码,文末我会提供的,jar文件的打包也没什么神秘的,去eclipse试试就知道了。

screenMatchPX.bat内容:

java -jar %~dp0\screenMatchPX.jar 720 1280
pause

也可以写成

java -jar 路径\screenMatchPX.jar 720 1280
pause

如果不了解批处理知识的,干脆别折腾了,直接用。但后面跟的参数要注意,看源码:

public static void main(String[] args) {System.out.println("开始运行...");//基准宽高int baseW = 720;int baseH = 1280;String addition = "";try {if (args.length == 1) {addition = args[0];} else if (args.length == 2) {baseW = Integer.parseInt(args[0]);baseH = Integer.parseInt(args[1]);} else if (args.length >= 3) {baseW = Integer.parseInt(args[0]);baseH = Integer.parseInt(args[1]);addition = args[2];} else {System.out.println("没有发现输入参数...");}} catch (NumberFormatException e) {System.err.println("right input params : java -jar xxx.jar baseW baseH w,h;w,h;...;w,h;");e.printStackTrace();System.exit(-1);}new GenerateValueFiles(baseW, baseH, addition).generate();}

默认基准值为,1280x720,

默认适配屏幕为

"320,480;480,800;480,854;540,888;600,1024;720,1184;720,1196;720,1280;768,1024;768,1280;800,1280;1080,1812;1080,1920;1440,2560;";

如果你觉得不合适就在参数行更改。

注意参数格式:

java -jar xxx.jar 基准width 基准height 待适配w,待适配h;待适配w,待适配h;待适配w,待适配h;

java -jar xxx.jar 基准width 基准height

java -jar xxx.jar 待适配w,待适配h;待适配w,待适配h;待适配w,待适配h;

搞定,会用这个bat批处理,生成对应的尺寸文件,在代码里面设置按钮的宽度为@dimens_x/x720 ,则在任何手机上都会是横向全屏的。

有一点坑,就是你需要获取待适配的手机的像素值,不要看网上的说明参数,需要看程序运行的参数值。

我踩的坑:我的测试机联想A880,查阅屏幕参数为960x540,于是我加进去了。然后在程序中测试发现,失陪效果不好。

经过测试发现,它用的是800x480的尺寸文件。纠结很久发现程序能得到的屏幕尺寸其实为888x540,然后修改后重新生成values文件,才正常。

若你获取到的屏幕像素参数为 1283.45 x 724.89,那就取 1283x724,不要四舍五入了。

总结:

此方法,你需要做的是:

1、把screenMatchPX.bat和screenMatchPX.jar两个文件拷贝到你项目的main目录下;

2、修改screenMatchPX.bat文件中你需要适配的屏幕参数;

3、进到screenMatchPX.bat文件所在的硬盘位置,双击执行。执行是不要在AS里面双击,AS不可执行bat文件。

over

二、DP适配。

dp适配原理和上面px适配一样,只不过是拿dp值来等比缩放的而已。

无论手机屏幕的像素多少,密度比值多少,但80%的手机的dp值(widthPixels / density)都为360dp,所以对于这些手机,我们以360dp为基准,即只要写@dimen/dp_360即可让控件横向沾满屏幕。那万一有些手机的这个值是520dp怎么办呢?加进去生成对应的values即可了。

screenMatchDP.bat里面的代码为:

java -jar %~dp0\screenMatchDP.jar 360 384 400 411 533 640 720 768 820
pause

默认第一个为基准项,360dp。

后面跟的都是你需要适配的dp值,即某款手机的widthPixels / density比值。

如果你不跟参数,程序默认的参数为:

args = new String[]{"360", "384", "400", "411", "533", "640", "720", "768", "820"};

在程序的默认values文件夹中需要一份dimens.xml文件:

<resources><!-- Default screen margins, per the Android Design guidelines. --><dimen name="activity_horizontal_margin">16dp</dimen><dimen name="activity_vertical_margin">16dp</dimen><dimen name="dp_m_60">-60dp</dimen><dimen name="dp_m_30">-30dp</dimen><dimen name="dp_m_20">-20dp</dimen><dimen name="dp_m_10">-10dp</dimen><dimen name="dp_m_5">-5dp</dimen><dimen name="dp_0.1">0.1dp</dimen><dimen name="dp_0.5">0.5dp</dimen><dimen name="dp_1">1dp</dimen><dimen name="dp_2">2dp</dimen><dimen name="dp_2.5">2.5dp</dimen><dimen name="dp_3">3dp</dimen>...........<dimen name="dp_370">370dp</dimen><dimen name="dp_402">402dp</dimen><dimen name="dp_410">410dp</dimen><dimen name="dp_422">422dp</dimen><dimen name="dp_472">472dp</dimen><dimen name="dp_500">500dp</dimen><dimen name="dp_600">600dp</dimen><dimen name="dp_640">640dp</dimen><dimen name="sp_6">6sp</dimen><dimen name="sp_7">7sp</dimen><dimen name="sp_8">8sp</dimen><dimen name="sp_9">9sp</dimen><dimen name="sp_10">10sp</dimen><dimen name="sp_11">11sp</dimen>......<dimen name="sp_19">19sp</dimen><dimen name="sp_20">20sp</dimen><dimen name="sp_21">21sp</dimen><dimen name="sp_22">22sp</dimen><dimen name="sp_24">24sp</dimen><dimen name="sp_28">28sp</dimen><dimen name="sp_38">38sp</dimen><dimen name="sp_40">40sp</dimen><dimen name="sp_41">41sp</dimen><dimen name="sp_48">48sp</dimen>
</resources>

需要负的dp,就写负数的item。有字体的适配。

程序里面会先读取上面的这个默认dimens.xml文件,然后根据需要适配的dp值生成对应的dimens.xml文件。

万一哪天你发现没有你想要的item,比喻888dp。那你就在默认的values中的dimens.xml中添加888dp,然后重新执行bat文件生成新的数据即可。

美工给图的时候最好是1280x720的图,这样的话,拿到宽度的值直接除以2,代码里面写成@dimen/dp_360即可。方便计算。

总结:

此方法,你需要做的是:

1、默认的values文件夹中需要一份特定的dimens.xml文件。文末提供下载

2、把screenMatchDP.bat和screenMatchDP.jar两个文件拷贝到你项目的main目录下;

3、修改screenMatchDP.bat文件中你需要适配的屏幕dp参数;

4、进到screenMatchDP.bat文件所在的硬盘位置,双击执行。执行是不要在AS里面双击,AS不可执行bat文件。

OVER

源码图:

dp目录是dp方式适配的源代码。

px目录是hongyang提供的px适配源代码。

MainActivity类中有获取屏幕参数和dp参数的代码。

根据你的需要,自己修改和定制程序吧。

阿杜提供,放心盗版。

以上两种方法大概原理和使用方法都介绍完了,你可以实验。dp的方法我们已经应用到项目中了,没问题。px的方式只是测试过,没有应用。

dp方法的缺点:如果没有默认的dimens.xml,那就黄昏依斜阳了,还好有提供。优点是,没有枚举全部的item,可以省一些apk空间;有字体sp的适配。

px方法的缺点:屏幕px的种类远多于dp的种类,文件数量多;程序for循环枚举item项,有部分用不上的px项;width和height都适配了,给控件写width尺寸时要用dimens_x.xml里面的变量值,写height尺寸时需要用dimens_y.xml里面的变量值。

GitHub上提供更新jar和源码

GitHub源码地址:https://github.com/mengzhinan/PhoneScreenMatch

CSDN下载地址:http://download.csdn.net/detail/fesdgasdgasdg/9613054

详细使用说明文档地址:http://download.csdn.net/detail/fesdgasdgasdg/9913744

Android屏幕适配dp、px两套解决办法相关推荐

  1. 鸿洋android屏幕适配四部曲-传送门

    鸿洋android屏幕适配四部曲-传送门 两分钟理解Android中PX.DP.SP的区别 https://blog.csdn.net/donkor_/article/details/77680042 ...

  2. 2021年最全Android屏幕适配的度量单位px dp(dip) ppi dpi sp pt的区别(最详细,屏幕尺寸,屏幕分辨率,屏幕兼容,屏幕适配)

    0 前言 快乐李同学最新在学习Android屏幕适配相关的知识点,其中涉及到了很多Android屏幕适配相关概念和度量单位,但是快乐李同学掌握的相关知识不牢固,于是决定写出这两篇文章对这方面的知识点做 ...

  3. Android 屏幕适配攻略(二)单位dp与px来表示控件的尺寸

    Android 屏幕适配攻略(二)单位dp与px来表示控件的尺寸 在安卓中,将屏幕密度分为了五类 屏幕密度 对应的标签 对应的像素 120dip ldpi 1dp= 0.75px 160dip mdp ...

  4. android 屏幕最小宽度_最小宽度360dp Android屏幕适配—被偷走的dp - 硬件设备 - 服务器之家...

    最小宽度360dp Android屏幕适配-被偷走的dp 发布时间:2017-05-11 来源:服务器之家 一.Android手机屏幕DPI DPI概念自行百度 Android手机按照不同DPI分为: ...

  5. Android屏幕适配的两种方式

    ScreenHelper github 地址:github.com/bugyun/Scre- 欢迎 star 和 提问. 第一种适配方式 - sw 方式 插件版本: 使用方法 在项目的根 build. ...

  6. Android 屏幕适配攻略(三)单位dp与sp

    Android 屏幕适配攻略(三)单位dp与sp 1 一般手机默认使用情况下 在安卓中,一般情况下,也就是正常使用情况下 屏幕密度 对应的标签 对应的像素 sp 120dip ldpi 1dp= 0. ...

  7. android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度

    为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容. 1.重要概念 px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高. 屏幕分辨率:指在纵向 ...

  8. Android 系统(186)---最易懂的Android屏幕适配解决方案--总结版

    最易懂的Android屏幕适配解决方案--总结版 本文参考自: Google的官方权威适配文档 郭霖:Android官方提供的支持不同屏幕大小的全部方法 Stormzhang:Android 屏幕适配 ...

  9. Android屏幕适配(网易云音乐方案)

    简单高效无侵入式Android屏幕适配 最近在学习网易的Android课程,网易的老师提供了网易云音乐的屏幕适配解决方案,主要有两种,17年前是采用自定义缩放布局,17年后是采用的是工具类发方案,现在 ...

最新文章

  1. IE6 IE7 IE8(Q) 不支持 JSON 对象
  2. 用79种语言说爱琪琪格
  3. 我在海外做产品的1000 天:三大观察与学习
  4. python中while循环_Python第12课:while循环案例 打印输出有规律的造型
  5. jenkins更改默认端口
  6. 用html可以写游戏,javascript可以写游戏吗?
  7. LeetCode 697. 数组的度
  8. Openfire on Centos7
  9. 兰州大学c语言课程作业答案,兰州大学C语言程序设计课程作业1.doc
  10. Java 集合深入理解(15):AbstractMap
  11. python: 动态网页playwright 爬虫实践
  12. 一周信创舆情观察(6.15~6.21)
  13. OneNote | 插件/使用技巧
  14. Lena.jpg 与图像处理的渊源
  15. 代码检查工具系列——CheckStyle
  16. WEB电商项目广告管理与缓存解决方案
  17. http协议中get和post的区别
  18. 简单部署 rancher 管理kubernetes集群(3)
  19. 西游:我的弟子们过于嚣张(三)
  20. BFS、双向BFS和A*

热门文章

  1. 【胜利的唯一的方法,那就是实力,永远不用怀疑】
  2. 54.Python的def语句自定义函数
  3. C# WinForm 如何实现窗体的关闭时温馨提示
  4. R实战:【常用函数】rnorm正态分布
  5. Excel 日期或时间为负值或太大时会显示为#####
  6. 虚拟化服务器四根网线,立足虚拟化 戴尔4路R905 R910 服务器详细拆解北京dell服务器供应商企业博客...
  7. JavaScript减法概念
  8. 深入浅出理解kNN(k近邻算法)
  9. 微软出品优秀软件推荐
  10. error: 生成此程序集的运行时比当前加载的运行时新,无法加载此程序集