【问题标题】:FrameLayout with two children( Some View and a ProgressBar, with only one visible at any moment). How to set LayoutParams properlyFrameLayout 有两个孩子(一些视图和一个进度条,任何时候只有一个可见)。如何正确设置 LayoutParams
【发布时间】:2017-02-05 01:45:57
【问题描述】:

如果我想显示一个需要时间来获取内容的视图,我通常会将其包含在 FrameLayout 中,并在旁边添加一个 ProgressBar。获取时显示进度条,并在内容可用时显示视图。

带有 textView 的示例。

<FrameLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/selectableItemBackground"
        android:clickable="true">

        <TextView
            android:id="@+id/addressTv"
            android:layout_width="match_parent"
            android:minLines="4"
            android:maxLines="4"
            android:layout_height="match_parent"/>

        <ProgressBar
            android:id="@+id/addressLoadingBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:indeterminate="true" />
</FrameLayout>

在此示例中,在任何给定时刻仅显示“addressTv”或“addressLoadingBar”之一,另一个为“GONE”。

但我不知道如何使 FrameLayout 具有固定高度。在这种情况下,孩子们的最大身高。使用上面的布局,当我们在孩子之间切换时,它会发生变化。

【问题讨论】:

  • 您是否尝试过使用INVISIBLE 而不是GONE。这样它就可以作为最大的布局仍然存在。
  • 是的,成功了,谢谢。

标签: android android-layout android-framelayout layoutparams


【解决方案1】:

我建议切换到RelativeLayout,当布局膨胀时两个孩子都可见。然后将不需要的设置为不可见,并在准备好后更改。然后让进度条不可见。

【讨论】:

  • 我终于像你说的那样使用View.INVISIBLE 而不是View.GONE,但我看不出RelativeLayout 在这里有什么不同。
  • 可能差别不大。我只记得谷歌在其文档中说 FrameLayout 的典型用例就是一个孩子。而且,RelativeLayout 通常被认为是高效的。
【解决方案2】:
  1. 你有一个循环依赖问题 - 你的 FrameLayout 高度是 wrap_content 而你的 TextView 高度是 match_parent。您可能希望将 TextView 高度更改为 wrap_content

  2. 正如 @Disco 在 cmets 中提到的,使用 View.INVISIBLE 而不是 View.GONE 可能会解决问题。当视图“消失”时,它只是从视图层次结构中消失,而当它“不可见”时,它看不到,但逻辑上仍然存在,因此依赖于不可见视图的布局不受它“消失”的影响。

【讨论】:

  • 我最初是这么想的,但后来我看到了这个 -> stackoverflow.com/questions/4606613/… 那里的答案说这是一种常见的情况,所以这种循环依赖在 LinearLayout 和 FrameLayout 中是可以的。是的,使用 INVISIBLE 而不是 GONE 可以解决问题。感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 2022-01-21
  • 2017-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多