首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

在Activity中测量控件宽高的三种方式

编程知识
2024年09月24日 17:03

在进行Android开发时,有时需要测量控件的宽和高,常用的方式有以下三种:

(1)重写onWindowFocusChanged(hasFocus: Boolean)方法,在这个方法内获取控件的宽高

 这个方法在Activity的窗口焦点发生变化时调用,具体可以分为窗口获得焦点时和窗口失去焦点时。Activity的焦点发生变化时,相关的视图层次结构已经完成了测量,布局和绘制。

  • 获得焦点:当Activity的窗口从后台回到前台,或者从其他窗口中恢复。当获得焦点时,hasFocus传入true。
  • 失去焦点:当Activity的窗口被其他的窗口覆盖,或者用户按下home键使应用进入后台。当失去焦点时,hasFocus传入false。

(2)调用View的post(Runnable action)方法,在run方法中获取控件的宽高

  View的绘制过程包括onMesure(测量控件的宽高),onLayout(布局),onDraw(绘制)。post方法确保了所传递的Runnable对象会在视图树的测量,布局和绘制完成之后才运行,所以测试可以获取到控件的宽和高。

(3)观察者模式,给ViewTreeObserver添加监听器,在重写的方法onGlobalLayout()中获取控件的宽高

  ViewTreeObserver是一个监听视图树整体变化的类,它可以观察到视图树的各种全局事件。通过ViewTreeObserver,我们可以在视图树的布局过程完成之后获取到控件的宽高信息。

class MainActivity : AppCompatActivity() {
    private lateinit var tv: TextView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        tv=findViewById(R.id.tv)
        tv.post(object:Runnable{//第一种方式
            override fun run() {
                val width=tv.width
                val height=tv.height
                Log.i("post","width=${width},height=${height}")
            }

        })
        tv.viewTreeObserver.addOnGlobalLayoutListener(object:ViewTreeObserver.OnGlobalLayoutListener{//第二种方式
            override fun onGlobalLayout() {
                val width=tv.width
                val height=tv.height
                Log.i("viewTreeObserver","width=${width},height=${height}")
            }
        })
    }

    override fun onWindowFocusChanged(hasFocus: Boolean) {//第三种方式
        super.onWindowFocusChanged(hasFocus)
        val width=tv.width
        val height=tv.height
        Log.i("onWindowFocusChanged","width=${width},height=${height}")
    }
}

 

  

From:https://www.cnblogs.com/luqman/p/18429643
本文地址: http://www.shuzixingkong.net/article/2272
0评论
提交 加载更多评论
其他文章 Vscode 远程切换Python虚拟环境
本文简要介绍了Vscode 远程切换Python 虚拟环境的详细步骤和配置方法,同时详细介绍了如何在VSCode中创建虚拟环境的方法。
技术解读:华为云如何携手昇腾、鸿蒙等根生态,助力开发者技术创新
分享在华为云上通过生态协同,基于昇腾云服务、HarmoyOS、盘古大模型等产品实现技术创新、商业成功的故事,了解根生态各技术趋势及最新前沿科技。
技术解读:华为云如何携手昇腾、鸿蒙等根生态,助力开发者技术创新 技术解读:华为云如何携手昇腾、鸿蒙等根生态,助力开发者技术创新 技术解读:华为云如何携手昇腾、鸿蒙等根生态,助力开发者技术创新
在Linux 中使用 pidstat 命令监控进程性能
一、安装 pidstat 命令 检查系统是否已经安装了 pidstat 打开终端,输入以下命令检查是否已经安装了 pidstat: pidstat -V 如果显示版本信息,说明已经安装,可以跳过安装步骤。如果提示找不到命令,那么继续下一步安装。 更新包管理器 在安装 pidstat 前,建议先更新系
使用 Nuxt Kit 的构建器 API 来扩展配置
title: 使用 Nuxt Kit 的构建器 API 来扩展配置 date: 2024/9/24 updated: 2024/9/24 author: cmdragon excerpt: 摘要:本文详细介绍了如何使用 Nuxt Kit 的构建器 API 来扩展和定制 Nuxt 3 项目的 webp
使用 Nuxt Kit 的构建器 API 来扩展配置 使用 Nuxt Kit 的构建器 API 来扩展配置
设计模式之中介模式(三分钟学会一个设计模式)
中介模式(Mediator)又称之为调停模式。mediator [ˈmiːdieɪtə(r)] n. 调停者;斡旋者;解决纷争的人(或机构); 本意就是解决纠纷的中间人它是面向对象六大原则中最少知道原则的一个典型应用。(关于面向对象六大原则,可看前文:https://www.cnblogs.com/
设计模式之中介模式(三分钟学会一个设计模式) 设计模式之中介模式(三分钟学会一个设计模式) 设计模式之中介模式(三分钟学会一个设计模式)
mac M1,M2,M3芯片踩坑 nodejs ruby brew
执行 `arch -x86_64 zsh`报`arch: posix_spawnp: zsh: Bad CPU type in executable` 原因: 未安装rosetta 执行`softwareupdate --install-rosetta`安装rosetta报 ``` Package
小白必看!入门嵌入式你需要了解这些!
此文档的作用为:提供一个学习方法、例举出一些有学习意义的学习视频和文档,供0基础的你参考和学习。此处的学习可能有助于提升对于嵌入式整体的兴趣和概念的了解。
linux操作系统和文件系统,命令(上)
Linux是一个类似于windows的操作系统 Linux操作系统的一种主要使用方式是通过终端软件;终端软件里只能使用键盘不能使用鼠标,在终端软件里通过输入命令完成各种任务 clear命令可以删除终端窗口里的所有文字信息 操作系统里用来管理文件的部分叫文件系统 所有文件系统都采用分组方式管理文件 一