关闭

自定义view的大小设置模板

29人阅读 评论(0) 收藏 举报


    private int getHeightSize(int heightmeasureSpec) {
        int size = 0;
        int spec_mode = MeasureSpec.getMode(heightmeasureSpec);
        int spec_size = MeasureSpec.getSize(heightmeasureSpec);
        if (spec_mode == MeasureSpec.EXACTLY) {
            System.out.println("exactly");
            size = spec_size;
        } else if (spec_mode == MeasureSpec.AT_MOST) {
            System.out.println("at_most");
            size = textSize;
        } else if (spec_mode == MeasureSpec.UNSPECIFIED) {
            System.out.println("unspecified");
            size = 100;
        }
        return size;
    }


    private int getWidthSize(int widthmeasureSpec) {
        int size = 0;
        int spec_mode = MeasureSpec.getMode(widthmeasureSpec);
        int spec_size = MeasureSpec.getSize(widthmeasureSpec);
        if (spec_mode == MeasureSpec.EXACTLY) {
            System.out.println("exactly");
            size = spec_size;
        } else if (spec_mode == MeasureSpec.AT_MOST) {
            System.out.println("at_most");
            size = textSize * text.length();
        } else if (spec_mode == MeasureSpec.UNSPECIFIED) {
            System.out.println("unspecified");
            size = 100;
        }
        return size;
    }


    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        this.setMeasuredDimension(this.getWidthSize(widthMeasureSpec), this.getHeightSize(heightMeasureSpec));

    }



模板说明:

父       match_parent     match_parent            match_parent            wrap_content      wrap_content        wrap_content       200px                  200px                    200px    
子       match_parent     100px                        wrap_content             match_parent     100px                    wrap_content       100px                  match_parent        wrap_content
结果    exactly(fill)          exactly(100px)          at_most(fill)            at_most    (fill)     exactly(100xp)      at_most(fill)           exactly(100px)    exactly(200px)       at_most(200xp)




会执行哪种模式,由这个表来决定
MeasureSpec.EXACTLY:父视图希望子视图的大小应该是specSize中指定的。
MeasureSpec.AT_MOST:子视图的大小最多是specSize中指定的值,也就是说不建议子视图的大小超过specSize中给定的值。
MeasureSpec.UNSPECIFIED:我们可以随意指定视图的大小。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:58次
    • 积分:20
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档