Я делаю свое приложение совместимым с многооконным режимом и PIP (картинка в картинке).
У меня есть вид Recycler, который имеет тип GridLayout Holder, имеющий TextView и ImageView для каждого держателя вида.
Я даю размер моего Держателя в DP
(просто для информации, т.е. он должен изменить размер в зависимости от нового размера окна) и по умолчанию recyclerView не обрабатывает вызов onSizeChanged()
. Поэтому я создал customRecycler для обработки вызовов onSizeChanged()
. Но я не уверен, как справиться с изменением размера recyclerView, так как при изменении размера я должен перерисовать все View-holder также (только догадываясь).
class CustomRecyclerView : RecyclerView {
constructor(context: Context) : super(context)
constructor(context: Context, attributeSet: AttributeSet) : super(context, attributeSet)
override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
super.onSizeChanged(w, h, oldw, oldh)
/*
post {
requestLayout() // forcing relayout but this also doesn't work with or without post.
}
*/
}
}
Если я запускаю приложение в полноэкранном режиме, а затем переключаюсь в режим PIP. тогда результат будет ниже.
Ожидаемый результат:
Проблема:
Проблема, которую я понял, заключается в том, что представление Recycler при изменении размера не перерисовывает / не изменяет макет всего представления, так как размер держателя держателя не обновляется, когда размер окна приложения изменено.
Какой подход я должен использовать, чтобы настроить recyclerView в соответствии с новым размером экрана?