1

我的目标是在 FlexboxLayout(或类似的东西)中有效地显示大量 TextView(带背景)。

我想以一种“标签”布局风格显示有关电影中演员和工作人员的信息

布局的样子(其中一个 FlexboxLayouts 被标记)

我通过 LayoutInflater动态地将 TextViews 膨胀到 FlexboxLayout 中。问题当然是有很多数据(这意味着很多视图,有时超过 20 个 Flexbox-Layouts 中的 30 个或更多),我的片段/活动的创建时间会增加,并且活动需要更长的时间才能打开

我膨胀的 TextView:

<TextView 
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/tag_name"
      android:layout_width="wrap_content"
      android:layout_height="30dp"
      android:layout_margin="5dp"
      android:paddingStart="10dp"
      android:paddingEnd="10dp"
      android:gravity="center_vertical"
      android:background="@drawable/bg_tag"
      android:textColor="?android:textColorSecondary"
      android:text="@string/placeholder" />

我的容器布局(TextViews 膨胀到 FlexboxLayout 中@+id/fxl_names):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical">

  <TextView
    android:id="@+id/txt_names"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="?attr/colorOnBackground"
    android:padding="5dp"
    android:textSize="16sp"
    android:textStyle="bold"
    android:text="test" />

  //TextViews get inflated into this FlexboxLayout

  <com.google.android.flexbox.FlexboxLayout
    android:id="@+id/fxl_names"
    app:flexWrap="wrap"
    android:animateLayoutChanges="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

  <com.google.android.material.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/view_more"
    android:visibility="gone"
    android:layout_margin="0dp"
    android:text="Show all"
    style="@style/Widget.MaterialComponents.Button.TextButton.Dialog" />

</LinearLayout>

感谢您提供有关优化此布局的任何帮助/建议!

4

1 回答 1

1

当你必须动态地膨胀很多视图时,你应该使用调用ViewHolder来确保优化膨胀视图动作。

对于您的问题,您可能不得不使用 aRecyclerView而不是 a FlexBoxLayout,这是我认为的最佳解决方案。并FlexBoxLayoutManager整理您的意见。

Android FlexBoxLayout 存储库中有一个示例

于 2020-04-03T21:44:51.850 回答