【问题标题】:How do I set the layout for ShimmerLayout programmatically in Kotlin?如何在 Kotlin 中以编程方式设置 ShimmerLayout 的布局?
【发布时间】:2020-06-23 00:56:52
【问题描述】:

注意:我的问题与this 不同。

我想在 Kotlin 代码中以编程方式设置 ShimmerLayout 的布局。有可能吗?

目前,我可以像这样通过 XML 设置布局:

<com.facebook.shimmer.ShimmerFrameLayout
    android:id="@+id/shimmerLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="@{showSimmerBanner ? View.VISIBLE : View.GONE, default=gone}">

         <LinearLayout
            android:id="@+id/shimmerOrientation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <include layout="@layout/shimmer_banner" />
            <include layout="@layout/shimmer_banner" />
            <include layout="@layout/shimmer_banner" />

        </LinearLayout>

 </com.facebook.shimmer.ShimmerFrameLayout>

我们可以从 Kotlin 代码中设置布局 (@layout/shimmer_banner) 吗?

所以,xml是这样的:

<com.facebook.shimmer.ShimmerFrameLayout
   android:id="@+id/shimmerLayout"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:visibility="@{showSimmerBanner ? View.VISIBLE : View.GONE, default=gone}"/>

在 Kotlin 代码中这样调用这个 xml:shimmerLayout.set = R.layout.shimmer_banner,但它没有以编程方式从 Kotlin 代码设置布局的功能。

如何通过 Kotlin 代码做到这一点,仍然有 LinearLayoutvertical + 可以 add more 1 &lt;include&gt; tag

【问题讨论】:

    标签: android kotlin android-layout shimmer


    【解决方案1】:

    通过&lt;include&gt; 标签包含的布局只是膨胀到父级中,因此您只需使用 LayoutInflater 即可。

    假设(根据您的问题)您将微光布局引用为 shimmerLayout,您可以这样做:

    val inflater = LayoutInflater.from(shimmerLayout.context)
    inflater.inflate(R.layout.shimmer_banner, shimmerLayout)
    

    如果您已经有视图,要更改它,您需要执行shimmerLayout.removeAllViews(),然后执行上述操作。

    【讨论】:

    • 你好兄弟,如果想添加多个&lt;include&gt;标签,我该怎么做?
    • 您能否澄清一下“添加超过 1”的含义?如果你想包含多个布局,你当然可以通过多次调用inflate 来做到这一点,但由于它是一个 FrameLayout,它们最终会相互重叠。您可能希望将它们包装在 LinearLayout 或其他东西中。
    • 每个包含标签都相当于一个inflate,所以你可以多次调用inflate,正如我在之前的评论中提到的那样。
    • 所以,在我的新 XML 中,我只需添加 ShimmerFrameLayout 并在其中添加 LinearLayout。那么对于 Kotlin 代码中的 include tag 添加呢?我从 Kotlin 代码中添加的标签会自动出现在 LinearLayout?
    猜你喜欢
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-19
    • 2011-10-11
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多