安卓日记——屏幕适配

作者: 饥渴计科极客杰铿 | 来源:发表于2016-08-13 19:06 被阅读557次

    由于安卓的开源,各种设备的尺寸也是五花八门,我们无法做到任何设备都适配(特殊要求除外),所以只能针对目前比例最大的几种机型进行适配

    首先普及几个概念

    px是构成图片的最小单位,dpi是像素密度,对角线的像素除以长度,dip(也叫作dp)是密度无关像素,160dpi的设备上,1dip=1px。1dip 所等于的px和dpi成正比,也就是说在320dpi的设备上,1dip=2px。

    sp可以根据文字大小首选项进行放缩,谷歌官方推荐使用sp作为字体的单位,应该使用12sp以上且为偶数作为字体大小,否侧可能看不清或者放缩时可能造成精度的丢失

    名称 像素密度范围
    mdpi 120dpi~160dpi
    hdpi 160dpi~240dpi
    xhdpi 240dpi~320dpi
    xxdpi 320dpi~480dpi
    xxxhdpi 480dpi~640dpi

    支持各种屏幕尺寸的工作主要有以下几个方面

    1. 使用wrap_contnet、math_parent、weight
    2. 使用相对布局,禁止绝对布局
    3. 使用限定符
    4. 使用自动拉伸位图

    1.使用wrap_contnet、math_parent、weight

    在LinearLayout时,如果想两边的控件大小固定,中间的控件填充剩下的空间,可以设置中间控件的weight为1,其他两个不设或者设为0。
    如果设置了weight最好把想高度或者宽度设为0,比如想横向用weight,那么就把宽度设为0,设为0后宽度或者高度和weight成等比例,weight越大宽度或者高度越大。
    如果两个控件设置了math_parent和weight的话
    weight计算出来的高度=原来宽度+剩余空间*weight所占百分比

     <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
            <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent" 
                android:layout_weight="1"
                android:text="button1"/>
            <Button
                android:layout_width="match_parent"
                android:layout_height="match_parent" 
                android:layout_weight="2"
                android:text="button"/>
        </LinearLayout>
    

    设L是屏幕宽度,Button1现在的宽度是2/3L,他原来的宽度应该是L,剩下的宽度是L-2L,然后它weight所占百分比是1/3

    2/3L=L+(L-2L)*1/3
    

    2. 使用相对布局,禁用绝对布局

    如果是按照比例摆放的就用线性布局,如果要控件之间有特殊要求的就用相对布局

    3.使用限定符

    使用尺寸限定符,在values文件夹加上尺寸,然后应用可以根据不同设备尺寸选择,如values-480x320

    4.使用自动拉伸

    .9图左边和上边是拉伸区域,下边和右边是padding区域
    在左边和上边设的点所在的线会被拉伸,下边和右边所设的线的交叉区域保持和圆图相同的padding
    .9图要在保留图片的两侧点相同的点,线不要穿过图片,线上点会被拉伸,若某边不需要拉伸可以不设点

    最后放一个鸿洋大大的彩蛋

    Android AutoLayout全新的适配方式 堪称适配终结者

    相关文章

      网友评论

        本文标题:安卓日记——屏幕适配

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