zoukankan      html  css  js  c++  java
  • Android API之android.view.View.MeasureSpec

    android.view.View.MeasureSpec

    MeasureSpec是View的内部类

    public static class MeasureSpec

    MeasureSpec封装从parent传递给child的layout要求。每个MeasureSpec表示对width/height的要求。MeasureSpec由size和mode组成。可用的mode有3种:

    1. UNSPECIFIED表示parent没有强加给child任何constraint。

    2. EXACTLY表示parent已经确定child的精确size。

    3. AT_MOST表示child可以设定为specified size之内的任何值。

    MeasureSpec实现为int类型,相比object类型,降低了allocation。可以将<size, mode>元组pack和unpack为int类型。

     

    MeasureSpec定义的常量有:

    private static final int MODE_SHIFT = 30;

    private static final int MODE_MASK  = 0x3 << MODE_SHIFT;

    public static final int UNSPECIFIED = 0 << MODE_SHIFT;

    public static final int EXACTLY     = 1 << MODE_SHIFT;

    public static final int AT_MOST     = 2 << MODE_SHIFT;

     

    MeasureSpec定义的方法有:

    public static String toString(int measureSpec) {
        int mode = getMode(measureSpec);
        int size = getSize(measureSpec);

        StringBuilder sb = new StringBuilder("MeasureSpec: ");

        if (mode == UNSPECIFIED)
            sb.append("UNSPECIFIED ");
        else if (mode == EXACTLY)
            sb.append("EXACTLY ");
        else if (mode == AT_MOST)
            sb.append("AT_MOST ");
        else
            sb.append(mode).append(" ");

        sb.append(size);
        return sb.toString();
    }

    public static int getSize(int measureSpec) {
        return (measureSpec & ~MODE_MASK);
    }

    public static int getMode(int measureSpec) {
        return (measureSpec & MODE_MASK);
    }

    public static int makeMeasureSpec(int size, int mode) {
        return size + mode;
    }

  • 相关阅读:
    证明 O(n/1+n/2+…+n/n)=O(nlogn)
    ZOJ 3623 Battle Ships DP
    ZOJ 3631 Watashi's BG DFS
    ZOJ 3622 Magic Number 打表找规律
    poj 1088 滑雪 记忆化搜索
    poj 1273 Drainage Ditches 网络流最大流基础
    Codeforces Round #243 (Div. 1)A. Sereja and Swaps 暴力
    UVALive 5059 C
    Codeforces Round #295 (Div. 2)C
    Codeforces Round #295 (Div. 2)B
  • 原文地址:https://www.cnblogs.com/fengzhblog/p/3175948.html
Copyright © 2011-2022 走看看