首页>
技术资讯>
详情

android 布局长度单位深入研究(2)

2016-05-22 来源:CloudBest 阅读量: 4
关键词: 手机游戏程序设计

    System.out.println("density="+mDisplayMetrics.density);
    }
    3.densityDpi与drawable-(hdpi,mdpi,ldpi)之间的关系
    系统drawable有hdpi,mdpi,ldpi三个文件夹下面存放不同尺寸的图片,使用哪个文件下的文件,与系统densityDpi值是有关系的
    densityDpi=120:ldpi
    densityDpi=160:mdpi
    densityDpi=240:hdpi
    前面我又说过densityDpi取决于显示屏,这样你就了解了为什么不同显示屏WVGA,HVGA,QVGA会采用不同drawable-(hdpi,mdpi,ldpi)图片
    分辨率为240px*400px,densityDpi=120-->QVGA:ldpi
    分辨率为320px*533px,densityDpi=160 -->HVGA:mdpi
    分辨率为480px*800px,densityDpi=240 -->WVGA:WVGA
    4.尽管了解上面这些理论值,但是有时候发现设置了不同长度单位,可显示出来的效果却出人预想,我曾经就碰到过这种挠头的问题,为解决这个问题,只有
    深入代码,一探究竟了。
    在深入代码前我们首先要搞清楚一个问题,那就是代码中所有长度值的单位都是px,
    手上没有现成的例子就以现在我研究的/Launcher2/res/layout-land/workspace_screen.xml为例,看一个自定义属性:
    launcher:cellWidth="105pt"
    该属性自定义了一个桌面快捷图标的宽度,若读者自己测试,自己写个测试view,设置属性
    android:layout_width="800px"
    是一样的。
    当view 被创建的时候,xml中的属性值存在参数AttributeSet attrs中
    public CellLayout(Context context, AttributeSet attrs, int defStyle)
    继续看该构造函数的实现代码
    public CellLayout(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    //获取自定义属性组CellLayout中的所有自定义属性,关于自定义属性,这里不作展开说明
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CellLayout, defStyle, 0);
    //获取属性cellWidth的值,长度单位将转换为px
    mCellWidth = a.getDimensionPixelSize(R.styleable.CellLayout_cellWidth, 10);
    ……
    }
    实现长度单位换算的关键代码就在a.getDimensionPixelSize(R.styleable.CellLayout_cellWidth,

热门推荐 查看更多