Android Activity 启动时获取View的宽高为0?正确获取View宽高的方式

编程入门 行业动态 更新时间:2024-10-09 13:24:28

Android Activity <a href=https://www.elefans.com/category/jswz/34/1771122.html style=启动时获取View的宽高为0?正确获取View宽高的方式"/>

Android Activity 启动时获取View的宽高为0?正确获取View宽高的方式

一、描述

假设你在 Activity`onCreate()` 方法或 `onResume()` 方法去获取 View 的宽高信息,会发现拿到的宽高大概率都是0。这是由于 View 很可能还未完成布局,而没有宽高信息。

二、解决

1. 判断 View 是否已经完成绘制

使用 View 类的 `isLaidOut()` 判断是否已经完成布局,即

备注:AndroidX 中可以使用 `ViewCompat.isLaidOut(yourView)`

if (yourView.isLaidOut()) {// 视图已经完成布局// 在这里可以执行相关操作
} else {// 视图尚未完成布局// 可能需要等待布局完成后再执行操作
}

`isLaidOut()` 方法对于确保在视图完成布局后执行操作非常有用,但在处理复杂布局时需要谨慎使用,以避免引入不必要的延迟,更推荐使用下面这种 ViewTreeObserver 方法。

2. 使用 ViewTreeObserver

通过 View 的 ViewTreeObserver 添加一个监听事件,在 View 的大小完成计算后自动回调。

View yourView = findViewById(R.id.yourViewId);
ViewTreeObserver.OnGlobalLayoutListener victim = new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {// 从视图中获取宽度和高度信息int width = yourView.getWidth();int height = yourView.getHeight();// 执行您的操作}
};
yourView.getViewTreeObserver().addOnGlobalLayoutListener(victim);// 如果不在使用后,使用如下方法注销
yourView.getViewTreeObserver().removeOnGlobalLayoutListener(victim)

更多推荐

Android Activity 启动时获取View的宽高为0?正确获取View宽高的方式

本文发布于:2023-12-07 19:27:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1671636.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:启动时   正确   方式   Android   Activity

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!