Как установить макет мерцания программно в Kotlin? - PullRequest
0 голосов
/ 11 марта 2020

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

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

Ток, чтобы установить макет с помощью 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) из кода Kotlin?

Итак, 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 Ответ

1 голос
/ 11 марта 2020

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...