父布局为wrap_content时,如何获取自定义view的准确高度
时间: 2024-04-15 20:27:41 浏览: 65
当父布局的高度属性为 `wrap_content` 时,自定义 View 的高度是根其内容动态确定的,无法直接获取准确的高度值。但可以通过以下方法来获取自定义 View 的准确高度:
1. 使用 ViewTreeObserver 监听布局完成事件:在自定义 View 的代码中,可以使用 `ViewTreeObserver` 来监听布局完成事件,一旦布局完成,就可以获取到自定义 View 的准确高度。示例代码如下:
```java
ViewTreeObserver vto = customView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
customView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int height = customView.getHeight(); // 获取自定义 View 的高度
// 在这里可以使用获取到的高度进行后续操作
}
});
```
2. 重写 `onMeasure()` 方法:在自定义 View 的代码中,可以重写 `onMeasure()` 方法,在测量过程中获取到准确的高度值,并保存起来供后续使用。示例代码如下:
```java
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = MeasureSpec.getSize(widthMeasureSpec);
int height = MeasureSpec.getSize(heightMeasureSpec);
// 在这里可以获取到准确的宽度和高度,并保存起来
}
```
通过以上方法,你可以在父布局为 `wrap_content` 的情况下获取到自定义 View 的准确高度。
阅读全文