Как программно настроить макет мерцания в Kotlin?

ПРИМЕЧАНИЕ. Мой вопрос отличается от этого.

Я хочу установить макет ShimmerLayout программно в коде Kotlin. Это возможно сделать?

Current, чтобы установить макет через 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>

Можем ли мы установить макет (@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, если у вас еще есть LinearLayout с vertical + может add more 1 <include> tag?

1 ответ

Решение

Макет, включенный через <include> тег просто раздувается до родительского, поэтому вы можете просто использовать LayoutInflater для этого.

Предполагая (из вашего вопроса), что у вас есть ссылка на макет мерцания как shimmerLayout, вы можете просто сделать:

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

Чтобы изменить его, если у вас уже есть представления, вам нужно сделать shimmerLayout.removeAllViews(), затем проделайте то же самое.

Другие вопросы по тегам