Android 开发问题:getLeft、getRight、getTop、getBottom 方法返回的值都为 0

java 复制代码
View vBlock = findViewById(R.id.v_block);

Log.i(TAG, "vBlock left: " + vBlock.getLeft());
Log.i(TAG, "vBlock right: " + vBlock.getRight());
Log.i(TAG, "vBlock top: " + vBlock.getTop());
Log.i(TAG, "vBlock bottom: " + vBlock.getBottom());
复制代码
# 输出结果

vBlock left: 0
vBlock right: 0
vBlock top: 0
vBlock bottom: 0
  • 在 Android 开发中,上述代码中,getLeft、getRight、getTop、getBottom 方法返回的值都为 0
问题原因
  1. getLeft、getRight、getTop、getBottom 方法返回的是视图相对于其父容器的位置坐标

  2. 在 onCreate 或过早的阶段调用这些方法时,视图尚未完成测量和布局流程,因此坐标值尚未计算,默认返回 0

处理策略
  1. View.post 中打印坐标,确保视图已完成布局
java 复制代码
View vBlock = findViewById(R.id.v_block);

vBlock.post(() -> {
    Log.i(TAG, "vBlock left: " + vBlock.getLeft());
    Log.i(TAG, "vBlock right: " + vBlock.getRight());
    Log.i(TAG, "vBlock top: " + vBlock.getTop());
    Log.i(TAG, "vBlock bottom: " + vBlock.getBottom());
});
复制代码
# 输出结果

vBlock left: 0
vBlock right: 200
vBlock top: 49
vBlock bottom: 249
  1. 或者,在 onWindowFocusChanged 中打印坐标,确保视图已完成布局
java 复制代码
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);

    View vBlock = findViewById(R.id.v_block);

    Log.i(TAG, "vBlock left: " + vBlock.getLeft());
    Log.i(TAG, "vBlock right: " + vBlock.getRight());
    Log.i(TAG, "vBlock top: " + vBlock.getTop());
    Log.i(TAG, "vBlock bottom: " + vBlock.getBottom());
}
复制代码
# 输出结果

vBlock left: 0
vBlock right: 200
vBlock top: 49
vBlock bottom: 249
相关推荐
脸大是真的好~10 小时前
黑马JAVAWeb-01 Maven依赖管理-生命周期-单元测试
java·maven
zhangkaixuan45611 小时前
Apache Paimon 查询全流程深度分析
java·apache·paimon
cici1587412 小时前
MyBatis注解的运用于条件搜索实践
java·tomcat·mybatis
wangqiaowq12 小时前
StarRocks安装部署测试
java·开发语言
计算机学姐12 小时前
基于SpringBoot的高校社团管理系统【协同过滤推荐算法+数据可视化】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
工业甲酰苯胺16 小时前
实现 json path 来评估函数式解析器的损耗
java·前端·json
老前端的功夫16 小时前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
@forever@16 小时前
【JAVA】LinkedList与链表
java·python·链表
LilySesy16 小时前
ABAP+WHERE字段长度不一致报错解决
java·前端·javascript·bug·sap·abap·alv
六件套是我16 小时前
redission实现延时队列
android·java·servlet