【问题标题】:Determining width of a layout after enabling visiblity of a child view在启用子视图的可见性后确定布局的宽度
【发布时间】:2011-12-16 11:55:50
【问题描述】:

我有一个相对布局,其中有一个 ImageView 和一个与 ImageView 右侧对齐的 textview。

我有一个类可以扩展此相对布局并自行添加(就好像它是那个布局一样)。

最初 textview 的可见性设置为 GONE,因此视图的大小就是 ImageView 的大小。 现在,当视图获得焦点时,我将 textview 的可见性设置为 VISIBLE 并设置动画以将视图的大小从 imageView 的宽度逐步调整为(大约)imageview+textview 宽度(我实际上是在程序中给出硬编码值)。

我的问题是,在我启用/禁用 textview 的可见性后如何确定布局的总宽度(因为 textview 的宽度可以是可变的),以便我可以将该值指定给动画作为最终端点?

我想在设置可见性后立即发现这一点,因为如果启用可见性和启动动画有延迟,输出就像首先显示具有完整宽度的视图(imageview+textview),然后返回到 imageview 大小(动画开始),然后继续到 imageview+textview 大小(动画结束)。 如果这些当时都没有办法找出来,那么有没有人可以建议我手动计算一下最终的尺寸可能是多少?

----编辑----

对于我想要达到的效果,似乎没有办法。只有在 Android 完成该视图的布局后,才能计算视图的最终尺寸。启用子视图的可见性后无法立即计算最终尺寸

因此对于我的解决方案,我将父布局(相对布局)设置为 fill_parent 作为宽度,有另一个子布局(背景),我可以通过程序控制其大小,然后在此之上我有我的 imageView ( Parent 左对齐)+ textView(imageView 的右侧,fill_parent)。

所以当第一次创建视图时,父布局总是fill_parent,背景布局只有imageview的大小,并将textview的可见性设置为不可见。当文本添加到文本视图时,几毫秒后(使用倒计时),我获取了最终尺寸,将动画设置为从 imageView 的宽度缩放到 imageView+textView 宽度,动画结束后设置可见性文本视图可见。

我不确定我的解决方案是否是最好的,但它似乎可以正常工作,没有任何故障。

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    如果我正确理解了您的问题,在您想要的视图中使用 getWidth()getHeight() 将返回您寻求的尺寸。

    【讨论】:

    • 它确实给了我尺寸,但是我想要更新的宽度。例如。如果图像视图宽度为 130 像素,文本视图宽度为 270 像素,最初它将返回 130 像素(因为文本视图可见性已消失),并且在将文本视图可见性设置为可见后,我希望 getWidth 返回 400,但它仍然返回 130 像素。 getWidth 仅在视图布局完成后才反映 400。我想要一种在视图布局完成之前找出总宽度的方法,以便动画可以正常工作而不会出现任何闪烁。
    • 你试过这个链接吗?好像是你想要的(抱歉我没时间为你试一试):stackoverflow.com/questions/4074937/…
    【解决方案2】:

    将RelativeLayout 的宽度值设置为“wrap_content”,这样无论内容的大小都会设置为RelativeLayout。

    <RelativeLayout
        android:layout_width="wrap_layout" android:layout_height="wrap_content">
        <ImageView
        android:layout_width="wrap_layout" android:layout_height="wrap_content" />
        <TextView
        android:layout_width="wrap_layout" android:layout_height="wrap_content" />
    </RelativeLayout>
    

    无需设置硬编码值

    【讨论】:

    • 我的 xml 文件与您建议的完全一样,它确实返回了宽度。但是,在启用 textview 的可见性之后和视图的布局完成之前,我需要宽度。我添加了一条评论以由 gnclmorais 回复。也许你能得到一些想法,并能更好地帮助我。
    猜你喜欢
    • 1970-01-01
    • 2014-02-22
    • 2018-03-11
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    相关资源
    最近更新 更多