[解决问题系]Android中View与ViewGroup获取内容宽高

我们都知道,在View中提供了getWidth与getHeight方法,但是这两个方法获取到的都是View的高度,而不是View中内容的高度,那么内容的高度如何获取呢??

目录


1. 什么是内容的高度?

这里写图片描述

如图中,绿色的为ViewContent为内容,如果ViewViewGroupcontent可看做所有子节点

2. 为什么获取内容宽高

当我们自定义滑动时,期望滑动到内容最底部时,不能再往下滑动,故需要获取内容的宽高来限定。

3. 如何获取内容高度?

3.1 ViewGroup获取内容高度?(以竖直方向的LinearLayout为例)

不同的ViewGroup会有不同的内部规则,需要根据不同的ViewGroup通过不同的规则获取。

linearLayout.post(new Runnable() {
    @Override
    public void run() {
        View last = linearLayout.getChildAt(linearLayout.getChildCount() - 1);
        int contentHeight = last.getTop() + last.getHeight() + linearLayout.getPaddingBottom();
    }
});

3.2 View的内容高度获取(以TextView为例)

很多View的内容宽高是和View的宽高一致的,但是有些时候,会不统一,比如长文字,文字总高度高于 TextView的高度时。如果其他View需要获取内容高度与宽度,需要了解内部实现,并依据推算出获取方法。

int contentHeight = textView.getLayout().getHeight()  //  文字的高度
    + textView.getPaddingTop() 
    + textView.getPaddingBottom();

推荐视频教程:

Android从整体到局部系列视频教程戳我

广告:

我使用的装备:程序员必备 | 不伤关节 | 手感好 | 静电容 | Plum键盘|Niz键盘 戳我


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值