这个问题已经以各种形式被问过好几次了,但我还没有找到明确的答案。
在容器(contentView)的初始布局之后,我需要能够获得后代 Views 的尺寸和位置。在这种情况下所需的尺寸是不可预测的 View (组)——可能有多行文本、容纳装饰的最小高度等。我不想在每个布局过程中都这样做( onLayout).我需要的测量来自深度嵌套的子级,因此覆盖中间每个容器的 onLayout/onMeasure 似乎是一个糟糕的选择。我不会做任何会导致循环的事情 (trigger-event-during-event)。
Romain Guy 曾经暗示我们可以在 View 的构造函数中 .post Runnable(AFAIK 应该在 UI 中)线)。这似乎适用于大多数设备(在我个人拥有的 4 台设备中的 3 台上),但在 Nexus S 上失败。看起来 Nexus S 没有所有的尺寸,直到它为每个 child 完成一次传递,并且没有正确的尺寸当 posted Runnable 的 run 方法被调用时。我尝试计算布局遍数(在 onLayout 中)并与 getChildCount 进行比较,这再次适用于 4 次中的 3 次,但不同的 3 次(在 Droid Razr 上失败,这似乎只做一次 - 并获得所有测量值 - 无论 child 的数量如何)。我尝试了上述的各种排列(正常发布;发布到 Handler;将 getContext() 转换为 Activity 并调用 runOnUiThread ...所有人的结果相同)。
我最终使用了一个可怕的、可耻的、不好的 hack,通过检查目标组的高度与其 parent 的高度——如果不同,就意味着它已经被布局了。显然,这不是最好的方法 - 但似乎是唯一一种在各种设备和实现之间可靠工作的方法。我知道没有我们可以使用的内置事件或回调,但有更好的方法吗?
蒂亚
/EDIT 我想我的底线是 Nexus S 不会等到布局完成后 .posting() 一个 Runnable,就像我测试过的所有其他设备的情况一样,以及 Romain Guy 和其他人的建议。我还没有找到好的解决方法。有吗?
最佳答案
我成功地使用了 OnGlobalLayoutListener。
它在我的 Nexus S 上运行得很好
final LinearLayout marker = (LinearLayout) findViewById(R.id.distance_marker);
OnGlobalLayoutListener listener = new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
//some code using marker.getHeight(), etc.
markersContainer.getViewTreeObserver().removeGlobalOnLayoutListener(this);
}
};
marker.getViewTreeObserver().addOnGlobalLayoutListener(listener);
关于Android - 初始布局后的 react ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13758536/
在我的gem中,我需要yaml并且在我的本地计算机上运行良好。但是在将我的gem推送到rubygems.org之后,当我尝试使用我的gem时,我收到一条错误消息=>"uninitializedconstantPsych::Syck(NameError)"谁能帮我解决这个问题?附言RubyVersion=>ruby1.9.2,GemVersion=>1.6.2,Bundlerversion=>1.0.15 最佳答案 经过几个小时的研究,我发现=>“YAML使用未维护的Syck库,而Psych使用现代的LibYAML”因此,为了解决
我在Rails工作并有以下类(class):classPlayer当我运行时bundleexecrailsconsole然后尝试:a=Player.new("me",5.0,"UCLA")我回来了:=>#我不知道为什么Player对象不会在这里初始化。关于可能导致此问题的操作/解释的任何建议?谢谢,马里奥格 最佳答案 havenoideawhythePlayerobjectwouldn'tbeinitializedhere它没有初始化很简单,因为你还没有初始化它!您已经覆盖了ActiveRecord::Base初始化方法,但您没有调
我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc
我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是
是否可以为特定(或所有)项目使用多个布局?例如,我有几个项目,我想对其应用两种不同的布局。一个是绿色的,一个是蓝色的(但是)。我想将它们编译到我的输出目录中的两个不同文件夹中(例如v1和v2)。我一直在玩弄规则和编译block,但我不知道这是怎么回事。因为,每个项目在编译过程中只编译一次,我不能告诉nanoc第一次用layout1编译,第二次用layout2编译。我试过这样的东西,但它导致输出文件损坏。compile'*'doifitem.binary?#don’tfilterbinaryitemselsefilter:erblayout'layout1'layout'layout2'
最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路
我正在写一篇关于在Ruby中几乎一切都是对象的博客文章,我试图通过以下示例来展示这一点:classCoolBeansattr_accessor:beansdefinitialize@bean=[]enddefcount_beans@beans.countendend所以从类中我们可以看出它有4个方法(当然,除非我错了):它可以在创建新实例时初始化一个默认的空bean数组它可以计算它有多少个bean它可以读取它有多少个bean(通过attr_accessor)它可以向空数组写入(或添加)更多bean(也通过attr_accessor)但是,当我询问类本身它有哪些实例方法时,我没有看到默认
我去了这个website查看Rails5.0.0和Rails5.1.1之间的区别为什么5.1.1不再包含:config/initializers/session_store.rb?谢谢 最佳答案 这是删除它的提交:Setupdefaultsessionstoreinternally,nolongerthroughanapplicationinitializer总而言之,新应用没有该初始化器,session存储默认设置为cookie存储。即与在该初始值设定项的生成版本中指定的值相同。 关于
我最近与一位同事讨论了以下Ruby语法:value=ifa==0"foo"elsifa>42"bar"else"fizz"end我个人并没有看到太多这种逻辑,但我的同事指出,这实际上是一种相当普遍的Rubyism。我试着用谷歌搜索这个主题,但没有找到任何文章、页面或SO问题来讨论它,这让我相信这可能是一种非常实际的技术。然而,另一位同事发现语法令人困惑,而是将上面的逻辑写成这样:ifa==0value="foo"elsifa>42value="bar"elsevalue="fizz"end缺点是value=的重复声明和隐式elsenil的丢失,如果我们想使用它的话。这也感觉它与Ruby
我有一个类unzipper.rb,它使用Rubyzip解压文件。在我的本地环境中,我可以成功解压缩文件,而无需使用require'zip'明确包含依赖项但是在Heroku上,我得到一个NameError(uninitializedconstantUnzipper::Zip)我只能通过使用明确的require来解决问题:为什么这在Heroku环境中是必需的,但在本地主机上却不是?我的印象是Rails自动需要所有gem。app/services/unzipper.rbrequire'zip'#OnlyrequiredforHeroku.Workslocallywithout!class