View.post(),以及当Runnables被执行时

2024-05-15

我最初的问题是需要知道我的根的高度和宽度View这样我就可以进行程序化的布局更改。就我的目的而言,我不一定需要在onCreate();对于我来说,以编程方式添加我的孩子就足够了View根布局完成后,因此我很乐意使用onWindowFocusChanged()作为一个钩子来确定何时调用 rootView's getWidth() and getHeight()将返回有效结果。

不过我看到不少人问如何确定根View期间的尺寸onCreate()。我猜人们希望这样做是为了更好的用户体验 - 也许这样用户就不会看到分阶段构建的布局(如果有人能澄清原因,我将不胜感激)。现在,我常见的答案是这样的here https://stackoverflow.com/questions/3602026/linearlayout-height-in-oncreate-is-0,就是发布一个Runnable到根View within onCreate()。里面那个Runnable我们执行getWidth()等等。这之所以有效,显然是因为,Runnable发布到 a 的对象View被执行时View有布局和/或附加到窗口。

这引出了我的问题。在 API 文档中View,它似乎没有描述这种行为。那么,谁能告诉我它的定义和记录在哪里?或者说,这是一个检查来源的问题吗?它是一个绝对且严格定义的特征吗?Runnables将入住View的队列并且仅在布局过程之后的某个点进行处理?

进一步澄清:在阅读克里的答案并仔细考虑一下后,我的基本问题可以澄清如下:在给出的答案中here https://stackoverflow.com/questions/3602026/linearlayout-height-in-oncreate-is-0并且也在这个代码项目入口 http://www.codeproject.com/Tips/313848/Get-actual-screen-size-for-the-application-layout,我明白我们解决了根源问题View's期间无法获得尺寸onCreate()通过发布Runnable to the View。正如克里指出的,这条消息的保证是Runnable无法执行,直到onCreate()已执行。我知道布局发生在之后的某个时刻onCreate,但我现在还是不明白为什么会这样Runnable应该执行时View的尺寸已知。


我看了一下View.post(可运行) http://developer.android.com/reference/android/view/View.html#post%28java.lang.Runnable%29方法,在我看来,通过调用该方法,您只是将一条消息添加到 UI 线程队列中。唯一“保证”的是 Runnable 将在调用 post(Runnable) 的方法完成后的某个时间执行。这假设您从 UI 线程调用 post(Runnable) 但正如文档所说:

仅当此 View 附加到窗口时,才能从 UI 线程外部调用此方法。

我认为要确保您的根视图和子视图都有大小,您需要从子视图 onSizeChanged() 方法中调用 post(Runnable) 因为如果子视图有大小,我认为它遵循父视图,即根视图也必须有尺寸。

如果这个答案有点漫无目的,我深表歉意。我有点理解你想要实现什么,但不是 100% 确定。如果您想让我澄清任何事情,请告诉我。

就我个人而言,每当我需要视图的大小时,我都会在 onSizeChanged() 中执行所有操作,我相信这是“正确”的执行方式,并且它始终有效。

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

View.post(),以及当Runnables被执行时 的相关文章

随机推荐

  • 使用Jquery(或js)在html表格上循环遍历列的单元格(不是行的单元格)?

    使用 jQuery 循环遍历单元格或行很简单 但循环遍历列的单元格并不简单 for cells of rows I will do this table tr each function index elem loop through ce
  • 将所有分号替换为空格 pt2

    我尝试对 2000 多行关键字的列表运行文本分析 但它们的列出方式如下 战略 管理风格 组织 所以当我使用 tm 删除标点符号时 它就变成了 组织的战略管理风格 我认为这在某种程度上破坏了我常用术语的分析 我尝试过使用 vector lt
  • Spark/Gradle -- 在 build.gradle 中获取 IP 地址以用于启动 master 和worker

    我在基本层面上了解 build gradle 构建脚本的各个移动部分 但无法将它们全部结合在一起 在 Apache Spark 独立模式下 只需尝试从 build gradle 在同一个机器上启动 master 和worker 稍后将使用
  • Spring RESTful控制器方法改进建议

    我是 Spring REST 和 Hibernate 的新手 也就是说 我尝试组合一个企业级控制器方法 我计划将其用作未来开发的模式 您认为可以通过哪些方法来改进 我确信有很多 RequestMapping value user metho
  • 从脚本内更改自动热键托盘图标

    如何从 Autohotkey 脚本中将托盘图标更改为 my ico 例如 当脚本暂停时 为此 我在托盘菜单中提出了自己的 暂停脚本 菜单项 SingleInstance ignore Menu Tray Tip AutoCase 0 11
  • IE9-11 检测变换样式:preserve-3d

    我为一个项目制作了一个 3d 类型的菜单 自然 IE 会引起问题 因为 IE10 即使 3d 变换工作 也不支持变换样式 preserve 3d 我尝试了解决方法 通过对 3d 菜单容器的每个子元素应用变换 但至少可以说 动画看起来很糟糕
  • 文本溢出:省略号显示不同的字符

    我这里遇到了一些 CSS 问题 看这张图片 https www flickr com photos 125543025 N07 saved 1 在此图像中 我为文本 INTENSE TRAINING 添加了 CSS 样式 sample st
  • 我们什么时候应该在 Django 中使用“db_index=True”?

    当我们应该定义db index True在模型字段上 我正在尝试优化应用程序并且我想了解更多信息db index 什么情况下我们应该使用它 文档说使用db index True在模型字段上用于加速查找 但在存储和内存方面略有缺点 我们应该使
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959
  • Android Espresso 单击按钮时出现错误

    我正在尝试使用 espresso 框架为 Android 应用程序编写一些 UI 测试 现在我只是检查启动屏幕上是否存在所有元素 然后尝试单击登录按钮 单击按钮时 测试由于错误而失败 我似乎无法理解为什么会发生这种情况 我的测试代码是 Ru
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • Python 中的字符串slugification

    我正在寻找 slugify 字符串的最佳方法 蛞蝓 是什么 https stackoverflow com questions 427102 in django what is a slug 我当前的解决方案基于这个食谱 http code
  • bash:gitolite:找不到命令

    我正在尝试使用 Gitolite 在 Gitlab 中创建一个新分支 我完成安装步骤 当我遇到 设置 gitolite 部分时 我遇到了麻烦 我跟着这个link http sitaramc github com gitolite setup
  • 如何在 kubernetes 中将秘密标记为可选?

    来自文档 除非将秘密标记为可选 否则必须先创建秘密 然后再将其作为环境变量在 pod 中使用 引用不存在的 Secret 将阻止 pod 启动 如何将秘密标记为可选 您正在寻找的是 name ENV NAME valueFrom secre
  • ASP.NET Core MVC 视图组件搜索路径

    在此处的文档中 https learn microsoft com en us aspnet core mvc views view components view aspnetcore 2 2 https learn microsoft
  • xsi:type 属性搞乱了 C# XML 反序列化

    我使用 XSD exe 根据 XML 架构 xsd 文件 自动生成 C 对象 我正在反序列化 OpenCover 输出 但其中一个部分类未正确生成 这是导致异常的行
  • 一些基本的 PHP 问题 [已关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是有一些基本的 php 问题来加深我对学习的理解 但我找不到简单的答案 我有一个 php ajax 应用程序 它生成 mysql
  • If else 在 Web 网格列中

    如何在 webgrid 列中添加条件 if else grid GetHtml tableStyle table table bordered columns grid Columns grid Column RealName Name g
  • View.post(),以及当Runnables被执行时

    我最初的问题是需要知道我的根的高度和宽度View这样我就可以进行程序化的布局更改 就我的目的而言 我不一定需要在onCreate 对于我来说 以编程方式添加我的孩子就足够了View根布局完成后 因此我很乐意使用onWindowFocusCh