Как программно настроить макет мерцания в 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()
, затем проделайте то же самое.