如何在 Kotlin 中以编程方式设置 ShimmerLayout 的布局?

How do I set the layout for ShimmerLayout programmatically in Kotlin?

NOTE: My question is different from .

我想在 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 + can add more 1 <include> tag?

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

假设(根据您的问题)您参考了 shimmerLayout 的微光布局,您可以这样做:

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

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