android屏幕适配

设备机型不同导致屏幕大小和分辨率(Resolution)不同(碎片化),但是无论分辨率有多大,屏幕有多大,我们手指触控范围的百分比应该一样,适配一般就是要达到目标控件在所有机器里面屏占比一样大(当然,我认为这不是绝对的,怎么样合适怎么适配)。

一、几个名词
dpi:dots per inch,每英寸像素点,在android中叫屏幕密度。

ppi:pixels per inch,iPad、iPhone表示屏幕密度的名字;
( 在android中 dpi和ppi差不多一个意思)
这里写图片描述

px: pixels(像素);

dp:也写作dip,device independent pixels(设备独立像素).

px = dp * (dpi / 160)

sp : scale independent pixels,,文字专用,同dp相似,但还会根据用户的字体大小偏好来缩放;

一图片为例,为了保证图片在所有设备上的物理大小都一样,高DPI的设备上系统会拉伸图片,低DPI的设备上图片会被缩小,这样既会影响UI也会影响APP的执行效率。所以我们需要为不同屏幕密度的设备提供不同的图片,他们之间的对应关系如下。
这里写图片描述

二、适配

1.对于布局
合理使用布局。尤其是LinearLayout(线性布局)和 RelativeLayout(相对布局),拒绝使用绝对布局。

LinearLayout:特点是有一个weight(权重),权重是个牛B的属性,能按照比例分屏;

RelativeLayout:特点是能设置相对位置,相对啊,一直相对,不会在不同的大小的屏幕上跑到其他位置。

这两个都可以达到灵活的设置布局位置从而达到适配的目的。

2.对于设置大小
当要明确设置一个空间占多大时,这种时候也不要直接在布局里面设置绝对的大小比如40dp,要灵活的运用android工程的特性:在res资源文件夹下面创建不同分辨率用的values文件夹,比如values(默认),values-w320dp,values-w820dp 。

在values-XXX里面创建dimens.xml文件,在每个dimens.xml文件里面创建同名的dimen 。
values:

<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
</resources>

values-w820dp:

<resources>
    <!-- Example customization of dimensions originally defined in res/values/dimens.xml
         (such as screen margins) for screens with more than 820dp of available width. This
         would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
    <dimen name="activity_horizontal_margin">64dp</dimen>
    <dimen name="activity_vertical_margin">64dp</dimen>
</resources>

使用的时候,

android:layout_width="@dimen/activity_horizontal_margin"
        android:layout_height="@dimen/activity_vertical_margin"

其他的很多资源可以用同样的理论去做。

3.对于layout,引用的布局文件
dimen一样,除了系统默认的layout文件夹外,可以自己创建layout-w480dp等文件夹,在里面创建同名的layout布局文件,android系统会自动根据机器的分辨率,去相应的文件夹下面加载布局文件。我们可以再各个layout文件里面组合自己想要的样子,这样就达到了适配的目的。

注意,每个layout文件里面的控件应该都有相同的ID,必须要,不然系统找不到对应分辨率下布局文件里面的控件,程序会崩溃,切记切记,我适配的时候多次出现这种情况,往往要测试好多部手机才会发现。

4.一个牛B的库
Android 百分比支持库 android-percent-support,支持在布局文件中按照百分比设置控件占用的屏幕大小,谷歌推荐啊,必须学会用。

5.关于图片
上文说过,不同的dpi下同一张图片所占的大小是不一样的,要达到适配各种手机的目的,最好是在res下建立不同的drawable-hdpi,drawable-xhdpi等文件夹,里面放上同名但是像素不同的图片,自己计算合适的大小,这样,根据系统的设定,程序会自己找到合适的分辨率下的图片,这样就达到了适配的目的。

不过这样有一个问题,就是图片往往是占用空间的罪魁祸首,不仅APK会变大,使用时的内存也会不一样。

android有个特性,找资源会先从自己的分辨率下的资源文件中找,没有就往高的找,还是没有就往低的找。不想做很多图片的话,可以在最常用的分辨率下放一套图片。系统自己找图片的时候,最常用的手机会完美适配,高一点,或者低一点的dpi的手机,找到图片的时候,一般会显示出差不多大小。这种方法只能说可以用,不是最完美的。最完美的当然是号不在乎大小,做好几套图片。

还有一些,待续。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值