Android获取View宽高的几种方式

2023-11-11

有时我们会有基于这样的需求,当Activity创建时,需要获取某个View的宽高,然后进行相应的操作,但是我们在onCreate,onStart中获取View的大小,获取到的值都是0,只是由于View的绘制工程还未完成,和在onCreate中弹出Dialog或者PopupWindow会报一个Activity not running原理类似。接下来就为大家介绍几种获取View宽高的方法
一、重写Activity中的onWindowFocusChanged,当Activity获取到焦点的时候View已经绘制完成,也能获取到View的准确宽高了。同样的Dialog和PopupWindow也可以在这里弹出,需要注意的是这个方法会调用多次,当hasFocus为true时,才可进行相应的操作

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            System.out.println("onWindowFocusChanged width="
                    + tvTest.getWidth() + " height=" + tvTest.getHeight());
        }
    }

二、

/**
     * 会执行多次
     */
    private void getSize1() {

        ViewTreeObserver vto = tvTest.getViewTreeObserver();
        vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                int height = tvTest.getMeasuredHeight();
                int width = tvTest.getMeasuredWidth();
                System.out.println("height" + height);
                System.out.println("width" + width);
                return true;
            }

        });
    }

三、

private void getSize2() {
        ViewTreeObserver viewTreeObserver = tvTest.getViewTreeObserver();
        viewTreeObserver
                .addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        tvTest.getViewTreeObserver()
                                .removeGlobalOnLayoutListener(this);
                        System.out.println("onGlobalLayout width="
                                + tvTest.getWidth() + " height="
                                + tvTest.getHeight());
                    }
                });
    }

四、

private void getSize3() {
        tvTest.post(new Runnable() {

            @Override
            public void run() {
                System.out.println("postDelayed width=" + tvTest.getWidth()
                        + " height=" + tvTest.getHeight());
            }
        });

    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android获取View宽高的几种方式 的相关文章

  • 计算Android设备的PPI

    如何计算 Android 设备的 PPI 最特别的是 Android 平板电脑 请注意 我想计算设备的 PPI 而不是 DPI 就像一二三一样简单 让我们来计算一下PPI to Nexus 5 例如 float LCD Diagonal 4
  • Android webview 滚动不起作用

    我正在尝试在网络视图中向下滚动到页面底部 我正在使用谷歌在其教程中提供的网络视图示例 我正在使用这行代码来尝试滚动 但它不起作用 mWebView pageDown true 关于如何使其以编程方式滚动有什么建议吗 谢谢 public cl
  • 如何强制 Eclipse 将 xml 布局和样式显示为文本?

    我最近升级到带有 ADT 20 0 3 的 Eclipse 4 2 Juno 如果我查看旧项目中的布局或样式 Eclipse 只会向我显示其适当的基于控件的编辑器 我想编辑语法突出显示的 xml 文本 我没有找到将插件的编辑器切换到此模式的
  • Service 和 IntentService,运行从服务器轮询数据库值的服务哪个更好?

    我读过很多关于Service and IntentService 然而 当做出决定时 我没有足够的信心选择使用哪种类型来创建一个后台服务 该服务将在一定时间间隔内从数据库轮询数据 并在获得所需数据时停止它 因为数据代表请求的状态 例如 订购
  • 如何在android上的python kivy中关闭应用程序后使服务继续工作

    我希望我的服务在关闭应用程序后继续工作 但我做不到 我听说我应该使用startForeground 但如何在Python中做到这一点呢 应用程序代码 from kivy app import App from kivy uix floatl
  • 带操作按钮的颤动本地通知

    我在我的 flutter 项目中尝试了 flutter 本地通知插件 它在简单通知上工作正常 但我需要带有操作按钮的通知功能 请帮助我或建议我实现此功能 不幸的是 flutter local notifications 插件尚不支持操作按钮
  • 如何解决 Firebase AuthUi 中无法找到显式活动?

    使用 firebase UI 时 我无法找到显式活动类 com firebase ui auth KickoffActivity protected void onCreate Bundle savedInstanceState super
  • 如何在android线性布局上获得阴影? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在android中为View设置阴影 https stackoverflow com questions 4406524 how to set shadow to a view in androi
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • 调整浮动操作按钮的图标大小(fab)

    The new floating action button should be 56dp x 56dp and the icon inside it should be 24dp x 24dp So the space between i
  • 画透明圆,外面填充

    我有一个地图视图 我想在其上画一个圆圈以聚焦于给定区域 但我希望圆圈倒转 也就是说 圆的内部不是被填充 而是透明的 其他所有部分都被填充 请参阅这张图片了解我的意思 http i imgur com zxIMZ png 上半部分显示了我可以
  • 在旋转时从错误的资源文件夹中提取可绘制对象

    在这里拉我的头发 因此 我正在使用一个具有多种类型的可绘制对象的应用程序 并且它们的结构如下 res Portrait resources drawable mdpi drawable hdpi drawable xhdpi Landsca
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Android:滚动 Horizo​​ntalScrollView 时如何禁用 ScrollView 的垂直滚动?

    我正在开发一个带有带有 ScrollView 的 Activity 的 Android 应用程序 其中包含 Horizo ntalScrollView 等内容 当我触摸 Horizo ntalScrollView 时 我想禁用外部 Scro
  • 在 React Native 中调试应用程序崩溃

    我是 React Native 新手 我正在尝试安装 React Native Facebook SDK 以便我可以使用我的应用程序进行 Facebook 登录 我按照此处列出的步骤操作 https tylermcginnis com in
  • HERE 地图:更改路线已行驶部分的颜色

    导航时可以改变路线的颜色吗 具体来说 我希望路线中已行驶的部分的颜色与即将行驶的部分的颜色不同 现在都是同一个颜色 将 MapRoute 对象的 TravelColor 变量设置为透明对我来说很有效 mapRoute color Resou
  • Android 后台服务示例,具有交互式调用方法

    我不是 Android 方面的专家 我正在寻找一个 Android 应用程序的示例 该应用程序使用一个服务 其中有真正的功能方法 或者换句话说 一个服务可以用来做什么 我们什么时候需要它 超越简单的东西服务举例 我确信您渴望获得一些工作代码
  • Android:RecyclerView 不显示片段中的列表项

    有人可以帮我尝试让我的 RecyclerView 出现吗 如果我不在片段中实现它 就会出现这种情况 然而 当我尝试将其实现到片段中时 CarFront 中的其他 XML 代码与 RecyclerView 分开显示 我的日志中收到此错误 E
  • 错误:无法创建新会话,因为找不到需要 HttpClient、InputStream 和 long 的“createSession”

    我正在尝试自动化 Android 混合应用程序 但出现以下错误 1 线程 main org openqa selenium WebDriverException中出现异常 无法创建新会话 因为未找到需要 HttpClient InputSt
  • Android 中循环事件的星期几和时间选择器

    我想创建一个控件 允许用户在我的 Android 活动中选择一周中的某一天 星期一 和一天中的某个时间 下午 1 00 找不到任何关于此的好帖子 好吧 我想我已经明白了 我只是不喜欢这个解决方案 因为我在一周中的某一天使用的微调器与时间选择

随机推荐

  • QT信号槽机制

    信号槽 信号槽是QT中用于对象间通信的一种机制 也是QT的核心机制 在GUI编程中 我们经常需要在改变一个组件的同时 通知另一个组件做出响应 例如 一开始我们的Find按钮是未激活的 用户输入要查找的内容后 查找按钮就被激活 这就是输入框与
  • 细线表格 border-collapse:collapse;/*细线表格,合并边框*/

  • vue3获取reactive代理的target原数组

    使用toRaw获取 可从vue引入toRaw const t3 reactive age name 3 console log toRaw t3 age 官方示例
  • MySQL-SQL全部锁详解(下)

    作者 小刘在C站 个人主页 小刘主页 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 学习两年总结出的运维经验 以及思科模拟器全套网络实验教程 专栏 云计算技术 小刘私信可以随便问 只要会绝不吝啬 感谢CSDN让你我相遇 前言
  • R︱并行计算以及提高运算效率的方式(parallel包、clusterExport函数、SupR包简介)

    终于开始攻克并行这一块了 有点小兴奋 来看看网络上R语言并行办法有哪些 赵鹏老师 R与并行计算 做的总结已经很到位 现在并行可以分为 隐式并行 隐式计算对用户隐藏了大部分细节 用户不需要知道具体数据分配方式 算法的实现或者底层的硬件资源分配
  • 关于ISP下载中 编译后自动下载代码不能执行完成的一点问题 补充keil未破解下载超范围问题

    在STC的ISP下载过程中 偶尔发现一点问题 首先在建立工程的时候没有按照自己的芯片选择 而是选择的通用型号 我在ISP中选择芯片型号后 打开串口和工程 没有提示问题 由于习惯 勾选了编译后自动下载工程 在后面的编写过程中 起初是没有问题的
  • sklearn 转换器和预估器

    刚学习sklearn时 没分清转换器的fit 和模型训练的fit 还以为是一个 结果学完了回过头来 才发现这些差异 再此记录一下 一 sklearn 转换器和预估器 转换器 Transformers 定义 转换器是一种可以对数据进行某种转换
  • 前端例程20220914:带悬停动画登陆页面

    演示 原理 对登陆框监听鼠标进入 mouseenter 和退出 mouseleave 事件 在鼠标进入时添加一个元素 并设置其扩大的动画 在鼠标退出时设置元素动画 并在动画完成后删除元素 代码
  • VUE2基础知识(详细版)

    目录 1 Vue 1 1 介绍 1 2 MVVM模型 1 3 单页面应用 SPA 2 Vue的使用 2 1 局部使用 2 2 全局使用 推荐 3 组件 3 1 介绍 3 2 说明 1 组件后缀 2 组成部分 编辑 3 步骤 4 模板语法 4
  • 创新实验_stm32_点灯_流水灯

    创新实验 stm32 点灯 流水灯 软件 步骤 实例 点灯 流水灯 软件 keil stm32cubemx proteus vscode 步骤 实例 点灯 准备 选择芯片 软件配置 编写代码 写入程序 流水灯 注意变量的位数
  • Java写一个猜数字游戏Plus

    之前我写了一个普通的猜数字游戏 那个是猜一个数字 然后提示你猜的大了还是小了 这次在学习完数组后 又来整活了 哈哈 这次写的是系统随机生成10个1 50的数字 自己去猜 不提示大了还是小了 猜出后告诉你猜中了第几个 最后把所有系统生成的随机
  • Pytorch1.4.0+cuda9.2离线安装

    由于训练机无法联网 考虑离线安装pytorch 一 确保已安装cuda和cudnn 这里我安装的是cuda9 2 cudnn7 6 5 二 安装pytorch1 4 pytorch的安装一般来说是使用conda或者pip来安装 我选择使用p
  • 集成电路相关书籍

    注 从此开始 文中提到的书籍都会在公众号对应文章末尾给出链接 不需要在微信后台获取 当然还是可以通过在微信后台回复相关书名获取对应的电子书 在后台看到很多人回复集成电路相关的一些书籍 所以本文就提供一些书籍 书籍链接在公众号本文文末直接获取
  • 数学建模常见模型算法归纳总结

    一 常见模型汇总 在数学建模中 根据具体问题的特点和要求 选择合适的模型和算法是非常重要的 同时需要根据实际情况进行调整和优化 以得到合理和可行的解决方案 二 数学建模四大模型 在数学建模中 通常将数学模型按照其应用目标和任务的不同划分为四
  • 如何重写equals方法

    重写equals方法 我们都知道 如果不对equals方法进行重写的话 那么它默认比较的就是两个对象的地址值是否是一样的 但是我们往往需要比较的是对象的内容是否是一样的 除了几个内置重写了equals方法的类型 我们写的bean一般都要自己
  • python网络爬虫方向的第三方库是_测验9: Python计算生态纵览 (第9周)

    测验9 Python计算生态纵览 第9周 单项选择题 1 以下选项不是Python数据可视化方向第三方库的是 A Matplotlib B Seaborn C Mayavi D Pyramid 正确答案 D Pyramid是Web开发框架库
  • Web自动化测试05:Selenium-CSS定位

    系列文章目录 软件测试功能到自动化学习路线图 2022年最新版技术栈 软件测试01 从了解测试岗位职能和测试流程开始 附作业 软件测试02 6大实际案例手把手教你设计测试点 软件测试03 用例执行以及缺陷管理的学习 附禅道下载使用流程 软件
  • 常用相机投影及畸变模型(针孔

    常用相机投影及畸变模型 1 背景 2 针孔相机投影模型及其畸变模型 2 1 缩略词和术语 2 1 世界坐标系到像素坐标系 2 2 针孔相机模型 2 2 1 世界坐标系到相机坐标系 2 2 2 相机坐标系到像素坐标系 2 3 综述 2 4 内
  • alook浏览器哪个好 夸克浏览器_简单搜索、X浏览器、夸克浏览器、Via几款极简浏览器,到底哪个最好用?...

    1 X浏览器 用过的都说X浏览器的广告拦截很强悍 大小 0 8M 无开屏页 只有安卓版本 用过 Chrome 的 都说X浏览器是好的备胎 无新闻 无推送 无后台 不足1M却小而强大 给你淋漓尽致的浏览体验 极简干净整洁的界面交互 无新闻 无
  • Android获取View宽高的几种方式

    有时我们会有基于这样的需求 当Activity创建时 需要获取某个View的宽高 然后进行相应的操作 但是我们在onCreate onStart中获取View的大小 获取到的值都是0 只是由于View的绘制工程还未完成 和在onCreate