自定义view的大小设置模板



    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:我们可以随意指定视图的大小。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值