2018-01-24 android屏幕适配转载留存

转自 http://blog.csdn.net/fesdgasdgasdg/article/details/52325590


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

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

若想了解具体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内容:

[html] view plain copy

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

pause  

也可以写成

[html] view plain copy

java -jar 路径\screenMatchPX.jar 720 1280  

pause  

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

[html] view plain copy

public static void main(String[] args) {  

        System.out.println("开始运行...");  

        //基准宽高  

intbaseW = 720;  

intbaseH = 1280;  

Stringaddition = "";  

        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,

默认适配屏幕为

[html] view plain copy

"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;";  

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

注意参数格式:

[html] view plain copy

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

[html] view plain copy

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

[html] view plain copy

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里面的代码为:

[html] view plain copy

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

pause  

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

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

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

[html] view plain copy

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

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

[html] view plain copy

  


16dp  

16dp  


-60dp  

-30dp  

-20dp  

-10dp  

-5dp  

0.1dp  

0.5dp  

1dp  

2dp  

2.5dp  

3dp  

    ...........  

370dp  

402dp  

410dp  

422dp  

472dp  

500dp  

600dp  

640dp  


6sp  

7sp  

8sp  

9sp  

10sp  

11sp  

    ......  

19sp  

20sp  

21sp  

22sp  

24sp  

28sp  

38sp  

40sp  

41sp  

48sp  


需要负的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,340评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,762评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,329评论 0 329
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,678评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,583评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,995评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,493评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,145评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,293评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,250评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,267评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,973评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,556评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,648评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,873评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,257评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,809评论 2 339

推荐阅读更多精彩内容