美文网首页Android开发部落Android开发录小技巧
推荐一种非常好用的Android屏幕适配

推荐一种非常好用的Android屏幕适配

作者: wildma | 来源:发表于2018-04-06 10:43 被阅读6610次

前言

网上关于屏幕适配的文章已经铺天盖地了,为什么我还要讲?因为网上现在基本都是使用px适配,即每种屏幕分辨率的设备需要定义一套dimens.xml文件。再加上有些手机还有虚拟按键(例如华为),这样就还需要每个有虚拟按键的设备加多一套dimens.xml文件,再加上平板那些你会发现dimens.xml文件所占的体积已经超过2M了!这绝对不是我们想要的。

我这里要讲的是使用dp来进行适配(Google推荐的也是这种方式),使用这种方式项目中多套dimens.xml文件才占几百K,而且根本不用考虑虚拟按键的问题。这种方案已经在自己多个项目中应用过了,经过几十台手机测试过,基本不会出现适配有问题的情况。制作生成对应dimens.xml文件插件的作者(后面会讲)android阿杜也说过他在待过的两家大公司实践过,所以请放心使用。

为什么要进行Android屏幕适配?

关于为什么要进行Android屏幕适配,什么是dp、dpi这些概念我就不去一一讲解了,网上很多文章。这里我推荐几篇讲的比较好的:

px与dp适配的原理

  • px适配原理:
    根据设备屏幕的分辨率各自写一套dimens.xml文件,然后根据一个基准分辨率(例如720x1080),将宽度分成720份,取值为1px——720px,将高度分成1080份,取值为1px——1080px。生成各自dimens.xml文件对应的值。

  • dp适配原理:
    dp适配原理与px适配一样,区别就在于px适配是根据屏幕分辨率,即拿px值等比例缩放,而dp适配是拿dp值来等比缩放而已。

问题:

  1. 既然原理都一样,都需要多套dimens.xml文件,为什么说dp适配就比px适配好呢?
    因为px适配是根据屏幕分辨率的,Android设备分辨率一大堆,而且还要考虑虚拟键盘。而dp适配无论手机屏幕的像素多少,密度比值多少,80%的手机的最小宽度dp值(widthPixels / density)都为360dp,这样就大大减少了dimens.xml文件。

  2. px适配会根据设备的分辨率去找对应的dimens.xml文件(如下图,运行在分辨率为1920x1080的手机上,系统会自动找到对应的values-1920x1080文件),那dp适配呢?


dp适配也是一样的,只不过dp适配是根据“最小宽度(Smallest-width)限定符”来找的,即如果当前设备最小宽度(以 dp 为单位)为400dp,那么系统会自动找到对应的values-sw400dp文件夹下的dimens.xml文件,如图

获取设备最小宽度代码

        DisplayMetrics dm = new DisplayMetrics();

        getWindowManager().getDefaultDisplay().getMetrics(dm);

        int widthPixels = dm.widthPixels;

        float density = dm.density;

        float widthDP = widthPixels / density;

使用步骤

1、以某一widthDP为基准,生成所有设备对应的dimens.xml文件

生成这些文件当然不会手动去写,网上已经有大神android阿杜提供了自动生成工具。

工具使用步骤:

  1. 在Android Studio中安装ScreenMatch插件,如图:
  1. 在项目的默认values文件夹中需要一份dimens.xml文件
    我在github源码已经提供了一份,直接复制过来即可。

github地址:ScreenAdaptation

  1. 执行生成
    插件安装好后,在项目的任意目录或文件上右键,选择ScreenMatch选项。如图:

然后选择在哪个module下执行适配。
即基于哪个module下的res/values/dimens.xml文件作为基准dimens.xml文件,生成的其他尺寸dimens.xml文件放在哪个module下。

点击确定就会执行生成命令,如下代表生成成功。

然后再看看res目录下会自动生成一堆dimens.xml文件,如下:

通过上面的步骤就已经生成了所有设备对应的dimens.xml文件。

因为默认生成的是下列最小宽度dp的dimens.xml文件
384,392,400,410,411,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365,如果不需要或者需要增加某些dp值的dimens.xml文件,则需要修改配置文件,即screenMatch.properties文件(修改前先删除之前生成的全部dimens.xml文件)。配置文件在我们执行完成上面的命令后,会在项目的目录下自动生成,如下:

打开文件,修改下面的值即可。如下只需要适配384,392,400,410,411的值,不需要适配480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365的值

其中base_dp=360代表widthDP基准值,一般都是360dp,不建议更改,除非你对屏幕适配原理有深刻的见解。

当然!这些步骤你可以全部都不用做。直接复制我github上的各个dimens.xml文件到你项目即可!这些都是我在真实项目中使用的。

2、根据设计图标注,在布局写上对应的值。

在安卓中,系统密度为160dpi的中密度手机屏幕为基准屏幕,即320×480的手机屏幕。在这个屏幕中,1dp=1px。320x480分辨率对应的其他分辨率的比例如下:

image.png

图片来源:UI设计师不可不知的安卓屏幕知识

所以,如果UI给的是720x1280分辨率的图, 那么dp = px / 2, 给的是1080x1920分辨率的图,那么 dp = px / 3,即根据比例即可。

举例:UI在720x1280上做的图,其中一个按钮的宽高分辨为:宽720px,高为100px,字体大小为30px,在布局中则这样使用:

    <Button
        android:layout_width="@dimen/dp_360"
        android:layout_height="@dimen/dp_50"
        android:textSize="@dimen/sp_15"/>

代码中动态设置dp或sp:
如果需要在代码中动态设置dp或sp,则需要通过getDimension()方法获取对应资源文件下的dp或sp值再设置(具体参考github上的demo)。如下:

        /*获取sp值*/
        float pxValue = getResources().getDimension(R.dimen.sp_15);//获取对应资源文件下的sp值
        int spValue = ConvertUtils.px2sp(this, pxValue);//将px值转换成sp值
        mTvShowParams.setTextSize(spValue);//设置文字大小

        /*获取dp值*/
        float pxValue2 = getResources().getDimension(R.dimen.dp_360);//获取对应资源文件下的dp值
        int dpValue = ConvertUtils.px2dp(this, pxValue2);//将px值转换成dp值

怎么适配其他module?

  • 问题:在项目的其他module中怎么实现适配?难道也要多套dimens?
  • 解决:并不需要多套dimens,只需要在values文件夹下有一套与app module一样的dimens文件即可达到适配。因为经过编译,所有module中的dimen数据都会统一归类到主module(即app module)中的values/dimens.xml文件中了,然后系统又会根据你设置的值去找对应values-swxxxdp文件夹下的dimens.xml文件中的值。
  • 验证:在项目中建一个module,然后随便取一个dimens.xml文件中的值进行打印,分别运行在不同widthDP的设备上(用模拟器即可)观察打印的结果发现确实是这样的。

最后非常感谢大神android阿杜提供的插件,具体的dp适配与插件原理可以去看看他写的文章。

github地址:ScreenAdaptation

参考资料:

相关文章

网友评论

  • 507fe3413ead:感谢楼主提供的代码:smile:
  • 3242b1ef9bf6:有一点点误差,我宽设置了360dp,最右边有一点点留白
  • dfc0ce271de5:UI给的是PX在布局中我们是怎么写呢?5px对应是5dp么?如何写成和UI一致的呢?
  • OldWang12138:请问 为什么base_dp 值为什么不设置成 UI画图提供的手机宽度
  • 子书_8a81:大神,我做的是平板横屏适配,有很多疑惑的地方,请赐教,QQ276181637
  • 时光_eab1:大神,按照你的步骤生成了很多dimens文件,但是我的布局在不同大小屏幕上显示还是有很大差距,求赐教,QQ1350063403
    时光_eab1:必须用relativeLayout吗?constrianlayout适用不?
    时光_eab1:@wildma 在尝试中
    wildma:@时光_eab1 你可以试下用我github上的demo来写个简单的布局,运行在不同的手机看是否正常
  • bug研发组组长:大神在不在,设计图是按照ios的750*1334设计的我这该怎么计算
    wildma:@一介布衣_46b2 并不是这套适配方案导致的,应该是你编译器等其他原因。
    d5fd115b6aac:这个适配再写xml布局的时候无法实时预览,需要编译运行才能看见效果很麻烦
    wildma:@大风_ef53 看下评论,已经回答过其他人了。
  • bug研发组组长:我这ui设计图是750*1334的,那我这边在布局该怎么写?在线等!
    wildma:@大风_ef53 看下评论,已经回答过其他人了。
  • eaa0f570b8c9:你好,关于px适配生成values_aaXbb这种方法,如果我们再运行中,创建的values中没有当前手机的分辨率,此时就会报错,程序退出。微信:15981968964加你详询以下,谢啦!
    dfc0ce271de5:@wildma PX怎么适配呢??就是UI给的是PX我们在xml文件里也写成对呀的px,,这样怎么适配呢?
    wildma:@空蓝000000 你好,我这篇文章没有讲px适配的,讲的是dp适配的。如果是dp适配,创建的values-swXXXdp中没有当前手机对应的会自动往下找的,并不会报错。
  • 慢行的骑兵:大佬,这套方案适用于平板吗?公司准备做平板项目了.
    wildma:@令狐冲先生 适用
  • e1fab6db7218:请问下,横屏的时候应该怎样兼容呢?
    wildma:@X_38d3 用插件生成即可。
    蚂蚁绊倒象:@wildma 想问一下高度的dimens文件每个values-wXXXdp下都要手写一份吗?
    wildma:@ENTER_255f 如果只需要横屏那就用文章中的方法,如果需要同时兼容横竖屏,那么需要再生成一套高度的dimens文件,然后把所有文件中的values-swXXXdp中的s去掉,也就是全部改成values-wXXXdp
  • Ace__丨:想问一下,在1080*1920分辨率下,根据使用步骤弄得,但是我获取控件的宽度是1066 ,而不是1080,能问下为什么么
    wildma:@Ace__丨 没遇过,应该是你自己设置有margin值
  • Silence潇湘夜雨:浅显易懂
  • c1b405d8ae82:大神,方便加上QQ吗,429475006
    c1b405d8ae82:@wildma 感谢
    wildma:@lgz1112 加了
  • c1b405d8ae82:UI是按照iphone5s:4英寸1136x640像素 标注的,切图会切出4套,但是标注不会,这个时候这个应该怎么算啊,
    wildma:@lgz1112 100px就写 100/(640/360)dp
  • ez_7c7f:我用的平板是800*1280的 ui给我的设计图也是800 *1280的 那宽720px,高为100px 应该是多少dp值啊。。另外字体的话能不能还是用sp啊。。感觉字体不用用你这个dimen里面的值
    wildma:@胡钊_7c7f 用设计图中的最小宽度除于基准值360得到比例值,然后设计图控件标注多少就除于比例值即可。例如宽720px,高100px,则设置dp_720/(800/360),dp_100/(800/360) .我的dimens文件里也是有sp值的
  • Zachary46:图片你们怎么适配,用几套图?
    wildma:@Zachary46 我是一套,如果想更优可以用多套,但是缺点是APK表大。
  • 42f09f8717e5:ScreenMatch 插件下载失败:Plugin ScreenMatch was not installed: Cannot download
    'https://plugins.jetbrains.com/pluginManager/?action=download&;id=com.duke.screenmatch&build=AI-173.4301.25&uuid=5a9acf51-48c2-4aa8-b7d5-2014148cba7a': Read timed out
    无法访问啊,兄dei...(我试过了,翻不翻墙 都这样)
    wildma:都不能下载的话就去我github上下载插件,然后用本地安装的方法安装到AS。
  • andriod小学徒:现在的UI切的图是安卓苹果的分辨率大小来切的,这样换算的话会有误差,你有什么好的办法吗
    wildma:@lgz1112 这个是iPhone6的分辨率750X1334,因为UI一般切IOS图都是以iPhone6为基准的。
    c1b405d8ae82:@wildma 这个750是什么意思
    wildma:1. 强烈要求UI做一套Android的图。
    2.如果这个UI实在说不通,那就只能自己计算了。例如UI图上一个按钮的高度为100px,那么你就写100/(750/360)dp
  • 我一定会学会:“大神如果用这个,应该跟UI说根据什么尺寸和分辨率来给你切图“,您有回答:720x1280
    那为什么不需要说尺寸呢,UI可以在5寸图纸上作图,也可以在4寸的图纸上作图啊,难道效果不会不一样吗?
    我一定会学会:@wildma “英寸为单位也可以以分辨率为单位”的前提是知道屏幕密度!我现在知道为什么不需要告诉ui尺寸了,因为720x1280,有一个标准的屏幕密度,一般ui都知道!所以创建图纸之后,其实图纸的尺寸也就固定了!
    wildma:UI新建图纸可以以英寸为单位也可以以分辨率为单位,可以相互转换的,没有说新建分辨率为720x1280的4寸图纸这种说法。不知道我说的对不对,你可以问问你们UI。
  • 晨光_a:这个只能适配宽度,不能适配高度么?
    wildma:@晨光_a 文章中“获取设备最小宽度代码”那里有获取高度的
    晨光_a:@wildma 请问怎么知道最大高度呀,因为有时候需要一些固定的值
    wildma:同样适配高度的
  • BUG君:如果没有覆盖到某个屏幕尺寸, 运行以后会不会闪退
    wildma:@大风_ef53 用dp_360,还有看看有没有对应你的设备的values-swXXXdp文件夹
    bug研发组组长:您好,请问我用的是720*1080的分辨率 用您的方法试了宽sp_360但是发现并没有充满横屏,留有边界。这个怎么处理?
    wildma:@BUG君 当然不会,会默认往低的找。
  • 537edff76950:ui切的90x90的小图怎么办啊,还有很多小图怎么整啊
    wildma:@超_dai 文章有说,首先要看UI是根据哪个分辨率切图的,如果是720x1280,则除于2,既90/2,也就是dp_45
    537edff76950:@wildma 比如ui切的图是90x90px,但是我们平时可能会写成60x60dp,如果按照你的适配该怎么写啊,主要是不知道按照多少等份分配
    wildma:@超_dai 按你平时的方法用,如果你图片设置固定宽高那就用dimens文件中的值设置
  • 880e9cd66234:请问能适配平板吗?如果要适配2048x1536的平板 配置文件里面添加哪个值呀?求教???
    wildma:@你的世界来过 可以的,看我文章,需要过去该设备的最小宽度,然后生成对应的值。
  • 我一定会学会:请问一个问题,你这样,那切图怎么办,切图怎么去适配所有屏幕,res文件夹下,也就x-hdpi,xx-hdpi!(imageView是设置宽高WrapContent)
    wildma:@我一定会学会 按你平时的方法用,如果你图片设置固定宽高那就用dimens文件中的值设置
  • Android_HMH:大神如果用这个,应该跟UI说根据什么尺寸和分辨率来给你切图 谢谢大神
    Android_HMH:OK 感谢大神
    wildma:@Android_HMH 720x1280,1080x1920分辨率都可以
  • RamboMing:您好好,有几个问题咨询请教一下:
    1.app-module下value中的dimens.xml 取UI标注分辨率对应宽度的dimens.xml吗
    2.依赖的库中,如果需要,是否也是拷贝一份app-module下value中的dimens.xml
    3.ScreenMatch插件的源码中有一份基础的dimen.xml,知道是怎么来的吗?
    希望能够您的解答!谢谢
    wildma:@RamboMing 1. 不是的,就用基准的360do那一套
    2. 是的
  • 2d2f01ac9a39:大神,请问我这边下载ScreenMatch插件失败了,直接用你GItHub上面的dimens文件可以吗?
    谢谢啦~
    wildma:@谁也恰到好处 可以的。
  • 37度开水:<dimen name="dp_359">797.7778dp</dimen>
    <dimen name="dp_360">800.0000dp</dimen>
    <dimen name="dp_365">811.1111dp</dimen>
    <dimen name="dp_370">822.2222dp</dimen>
    <dimen name="dp_400">888.8889dp</dimen>
    <dimen name="dp_410">911.1111dp</dimen>
    <dimen name="dp_422">937.7778dp</dimen>
    <dimen name="dp_472">1048.8889dp</dimen>
    <dimen name="dp_500">1111.1111dp</dimen>
    <dimen name="dp_600">1333.3333dp</dimen>
    <dimen name="dp_640">1422.2222dp</dimen>
    <dimen name="dp_720">1600.0000dp</dimen>
    下面这块怎么不连续了?
    wildma:@Zachary46 是的,80%的手机的最小宽度dp值(widthPixels / density)都为360dp
    Zachary46:这里的数值指的是最小像素密度,我的小米6分辨率1920X1080的最小像素密度才360dp,可见确实不需要这么多:relieved:
    wildma:@37度开水 因为手机用不到这么大的,所以省略没写上,有需求可以自己补全即可。
  • 37度开水:我测试用的横屏pad

    heightPixels: 752px
    widthPixels: 1280px
    density: 1.0
    heightDP: 752.0dp
    widthDP: 1280.0dp
    2018-07-03 19:26:11.294 7934-7934/com.volvo.mdsonlineandroid I/MainActivity: 100dp --> 222

    打印的100dp是从sw800dp的文件中取出来的,太奇怪了,为什么呢?
    wildma:@37度开水 你的最小宽度是752dp,如果你没有添加sw752dp,按理说应该是去找最匹配的sw720dp。我这里也没有该平板,也不知道你是不是其他问题,你可以试试添加sw752dp的文件,看能不能适配到。
  • e5902ad8a35a:为啥 我的没有反应呢
    wildma:@都是因为我爱你 不太明白你指的分辨率很低具体什么意思。如果说不能适配,你可以看看文章哪里使用的不对。
    e5902ad8a35a:@wildma 没有效果 就是 按照你说的这样 整好了 还是和原来一样 分辨率很低
    wildma:@都是因为我爱你 什么没反应?
  • 瓦西里超超:楼主,假如我是1080X1920的分辨率的话,那我宽度是多少啊
    wildma:@瓦西里超超 如果UI给的是720x1280分辨率的图, 那么dp = px / 2, 给的是1080x1920分辨率的图,那么 dp = px / 3,即根据比例即可
  • 别吵在找8哥:设计稿是750*1334 计算出来有偏差 values需要怎么写?
    bug研发组组长:我的设计稿也是750*1334的,请问你是怎么适配的?
    andriod小学徒:就没有别的办法了吗
    wildma:@fengxitong 这是IOS的设计图,可以叫UI切一套Android的设计图。
  • 头撞豆腐:修改基准为720,重新生成会导致视图错乱...求解
    wildma:@头撞豆腐 基准一般都是360dp,不建议更改,除非你对屏幕适配原理有深刻的见解。
  • 慢行的骑兵:假设在values-sw320dp中的dimens存在<dimen name="status_bar_height">25dp</dimen>,该属性只针对api19的设备使用,那么需要创建两份文件吗?其一:values-sw320dp-v19,<dimen name="status_bar_height">25dp</dimen>;其二:values-sw320dp,<dimen name="status_bar_height">0dp</dimen>.
    慢行的骑兵:@wildma 谢谢楼主.
    wildma:@令狐冲先生 values-sw320dp-v19这样写系统应该是找不到的,没试过。而且你的其二0dp又是什么意思呢?
    如果你想每个设备都对应有,你就直接在基类写<dimen name="status_bar_height">25dp</dimen>,然后在用工具生成其他文件夹下的即可。
  • 5690b20311ce:请问下 你利用插件生成的最小宽度对应的文件 都是你在实际项目中运用的么 后面还有最小宽度都800以上的了 你这些是适配手机的还是平板的啊 ? 感觉没这么大的手机吧
    wildma:@夜刹之殇 全面屏的没手机测,你有的话可以打印出来看看。
    5690b20311ce:@wildma 你好 谢谢 请问下 现在都是全面屏了16:9 18:9 还有的是2K高清屏幕 他们的最小宽度 都在411dp以内么 没有大过411dp的是吧
    wildma:@夜刹之殇 后面有电视和平板的,目前遇到最大的手机是411dp,你可以先暂时适配到这个,如果后续发现有更大的再加上也可以。
  • 楊帥:好文章,支持
    wildma:@楊帥 感谢支持~
  • 5690b20311ce:你好 我有个问题请教下 我用你的这套适配屏幕方案 一个屏幕的最小宽度为360 另 一个最小宽度为411.42856 第一个问题 我的手机最小宽度为411.4285 我复制你的values全部文件到我的res目录下 那么我的手机是就近匹配411这个values文件里面的配置信息是么 ,当你的values文件没有和我相匹配的 系统都是自动找就近的配置文件自动配置是吧 ,还有一个问题 就是 上面2个不同的屏幕下 我XML文件里面写的一个Button 高度设置为@dimen/dp_45 但是在这两个不同分分辨率手机下 显示的高度 不是一般高 我在代码里面获取他们的高度 @Override
    public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    Log.i("yzz","hight==="+btn.getHeight());
    }

    打印的他们的高度是一样的 按理说 应该是不相同的高度 只是在 不同屏幕显示相同高度 请你解答下我的疑惑 谢谢了
    wildma:@夜刹之殇
    1.是的,匹配的是sw411dp的。
    2.会向下找,比如你说411.42856,那向下找就是411。
    3. 没太懂你的意思,你可以用我demo的例子打印2个手机的相关参数告诉发我。
  • Todo2:写的非常不错,赞
    组件化和插件化的开发里程总结
    https://www.jianshu.com/p/df2a6717009d
  • 13ac8a3cf43f:应用如果是竖屏的情况下没问题,但如果屏幕旋转成横屏(如平板),则底部的按钮还是显示的是竖屏时的宽度.
    wildma:@一个人敲代码 这个当然是了。你想下,假设宽度360dp,高度为640dp,难道相同分辨率,相同密度的手机你设置的360dp会变成640dp吗?屏幕适配的意思是你在不同分辨率和尺寸的手机上显示的效果是一样的,并不是说同样的手机你设置的360dp会变成640dp。px适配也是做不到的,你要实现竖屏占满宽度,换成横屏的时候也占满宽度的话可以使用match_parent或者权重之类的,或者你写2套布局分别是竖屏和横屏。
  • C喽喽:新增的那个screenmatch jar包是干什么用的
    wildma:ScreenMatch插件,即你用联网的方式装不上就用这个来本地安装。
  • wang_2018:为什么有些分辨率720*1280的会有很明显的差距呢?比如OPPO_R11
    wildma:@wang_2018 你说的差距是什么?
  • f1d861aa897e:我有一个疑问,这样适配以后是不是只需要一套图片资源了?
    wildma:@下个路口见_6466 跟多少套图片没关系
  • 小生来咯:学习了,感谢大佬
  • 8fd4125f7299:我碰到奇怪问题,我拿一个460.7的手机,他一直执行360默认的,不去sw460下面拿
    wildma:@紗暖和鴛鴦 还没遇到过这种情况呢,你可以打印数值出来找下是什么问题
    8fd4125f7299:@wildma 有的我在screenMatch.properties里设置生成了,我解压到res下面也有values-sw460dp的文件夹,里面数值也都对
    wildma:你应该是没有匹配sw460dp的文件吧?
  • 風的記憶:楼主,我咋没看到字体适配?
    wildma:@風的記憶 dimens文件里面的sp单位就是适配字体的
  • Big_Sweet:/**
    在安卓中,系统密度为160dpi的中密度手机屏幕为基准屏幕,即320×480的手机屏幕。在这个屏幕中,1dp=1px。320x480分辨率对应的其他分辨率的比例如下:
    **/
    其实你这里的sw=320*160/160=320,所以你缺少一个sw320的文件夹
    而在sw320的文件夹中1px=0.3dp;这样才对
    小生来咯:我没有sw320的文件夹作为基准也适配成功了。。。
    wildma:@Big_Sweet sw320我有加上,你看我github上的配置文件,只是当时忘了生成出来😂
  • Big_Sweet:有一个问题,你新建的那个dimens是sw360的也就是默认的对吧。
    我现在有一个手机的vivo x7plus分辨率为1080*1920
    dpi= context.getResources().getDisplayMetrics().densityDpi
    根据上面公式得到dpi=480
    sw=160*手机宽度像素/dpi
    所以我的手机sw=360
    对应的文件夹为sw360
    但是你的sw360里面的文件1dp=1px
    我的手机是1080*1920
    应该是3px=1dp
    为啥会这样呢
    wildma:@Big_Sweet 我的sw360里面的文件并不是你说的1dp=1px, 他在你说的那个手机是1dp=3px的。你可以打印出来看看哦
    Big_Sweet:@wildma 是,是用dp的,我说px只是用来表示他们的转换关系
    wildma:@Big_Sweet 我的sw360里面没有出现px,全部都是dp呢
  • 紫豪:一直在用这种方式,大部分机型都正常。
  • DaydreamC:楼主,GitHub上的dimen是主流手机适配吗?可以用在实际开发中吗?
    wildma:@DaydreamC 你说的都转一下dp什么意思?
    DaydreamC:@wildma 嗯嗯,回头我也这么用:blush:。在java文件中是不是都得转一下dp
    wildma:@DaydreamC 是的,就是我在实际开发中用的。
  • yayang数码:举例:UI在720x1280上做的图,其中一个按钮的宽高分辨为:宽720px,高为100px
    --------以上是楼主原话------------
    楼主在这个例子里将按钮的宽定义为@dimen/dp_360,高定义为@dimen/dp_50,
    生成工具默认是360份就是满屏,那么宽是dp_360是没错的,但是高怎么是dp_50,
    在720x1280上做的图,按钮高为100px,那么高度占屏幕比例是100/1280约等于
    0.078125,360份就约等于28份,高不是应该是dp_28吗?
    wildma:你理解错了,你可以看看这篇文章——》http://www.xueui.cn/experience/app-experience/ui-sedign-android.html
  • Dora_Liang:系统提供384,392,400,410,411,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365,要是我想适配一个360的,可以在match_dp中写入360吗?还是系统只能适配这些
    wildma:@谈恋爱的小猴子 是的~
    Dora_Liang:@wildma 意思是:如果我在match_dp中写入431或其他的,运行配置后,在values里面会自动创建一个对应的dimens.xml文件吗?
    wildma:@谈恋爱的小猴子 可以,有些奇葩的都可以自己添加生成。360在默认的那里就有了
  • 洋葱cy:高度怎么适配
    wildma:@洋葱cy 对呀,就是根据最小宽度去找对应的dimens.xml文件的,高度也是用那个文件的单位,并不是说只适配宽度。
    洋葱cy:@wildma sw是最低宽度啊 如何去适配高度
    wildma:@洋葱cy 高度一样适配,只是根据最小宽度查找文件而已
  • 冰冰的冻结:我们使用的adobe cc 软件按照 iPhone6 设计图,单位不是px,听ui 说是点,这个是不是没法按照作者说的适配啊
    冰冰的冻结:@wildma 嗯,这个我需要查查资料了,或者问问ui
    wildma:@冰冰的冻结 点好像是ios的单位,不太懂这个单位怎么使用,做安卓肯定要有px或者dp单位,如果你能将点转换成px或dp一样是适用的
  • d5ba366035a2:插件链接下载超时,要翻墙吗,要不给我csdn下载地址吧:smile: 感谢
    ixinrun:@cold初养成 借楼,可以看看这篇http://www.jianshu.com/p/4baa82130a9f
    wildma:@cold初养成 csdn很久没用了,明天我上传到github吧
  • 我真是你爸:那这样计算出来的大小不是只会适配一种机型吗。那
    wildma:不会的,只要符合给出的values-swxxxdp对应的设备都是能适配的。
  • jy006:如果 在代码要动态设置大小呢,如textview.settext(16),这个16要引用dimens么
    wildma:感谢提醒,文章已更新用法,具体也可以看github上的源码。
  • 从心开始的我:用ios的设计图 确实蛋疼
    wildma:态度坚定的跟UI要一套Android的图,他为了一点方便,我们就很麻烦了。:flushed:
  • 小碗熊Tony:不错
    wildma:谢谢支持:sunglasses:
  • 冰冰的冻结:对于全面屏 有没有好的适配效果呢 我们的UI用的是adobe cc 软件 也是按照里边的方法设置吗
    wildma:@冰冰的冻结
    1、这样的UI就是想偷懒,我上家公司也是这样,后来我强烈要求她出一套Android的图。态度要坚定!
    2、如果这个UI实在说不通,那就只能自己计算了。例如一个按钮的高度为100px,那么你就写100/(750/360)dp
    冰冰的冻结:@wildma 大佬,我们的ui 按照苹果6 1334 x 750 像素分辨率,326 ppi ,这样该如何计算呢?
    wildma:都是通用的,你算出全面屏的widthDP,然后生成对应的dimens.xml文件即可。跟软件没关系,看做的图是哪个分辨率的,然后对应等比例给控件设置即可。

本文标题:推荐一种非常好用的Android屏幕适配

本文链接:https://www.haomeiwen.com/subject/xefhhftx.html