سلام و احترام
در جلسات آینده این موارد برطرف میشن
در یکی از ویدیو ها استاد اشاره میکنند که در انتها ویدیویی ضبط خواهند کرد برای رفع باگ ها.
بسیار عالی.
فعلا ارتفاعی که استاد در فرگمنت محاسبه کردند را کامنت کردم و ارتفاع ثابت دادم مشکل رفع شد.
از constraint layout استفاده کن بجای frame layout اتربیوت app:layout_constraintDimensionRatio رو برای view pager ست کن دیگه نیازی هم به محاسبه طول و عرض نداری view به طور خودکار تو دیوایسای مختلف برا اساس ابعاد صفحه نمایش سایزش تغییر میکنه
: view اتریبیوت های
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/bannerSliderViewPager"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="16:9"
app:layout_constraintEnd_toStartOf="@+id/guideline_right"
app:layout_constraintStart_toStartOf="@id/guideline_left"
app:layout_constraintTop_toBottomOf="@+id/et_search"
android:layout_marginTop="16dp" />
با سلام
برای برطرف شدن باگ باید دوباره ارتفاع رو محاسبه کنید.. چون موقعی که بین تب ها جا به جا میشید ویو از بین میره و دوباره به وجود میاد و قبل از اینکه استیبل بشه لایو دیتای banner کال میشه و نمیتونه عرض صفحه رو درست بگیره و محاسبه کنه.. کافیه در بخشی که ارتفاع رو محاسبه میکنه مانند زیر یک فانکشن کنید:
private fun calculateBannerSliderHeight() {
//calculate the height of viewPager
val viewPagerHeight = ((binding.bannerSliderViewPagerHome.measuredWidth
- convertDpToPixel(32f, requireContext())) * 173) / 328
//take layoutParams for set a new Height in viewPager.
val layoutParams = binding.bannerSliderViewPagerHome.layoutParams
layoutParams.height = viewPagerHeight.toInt()
//set new layoutParams for viewPager
binding.bannerSliderViewPagerHome.layoutParams = layoutParams
Timber.d("${binding.bannerSliderViewPagerHome.measuredWidth} and ${layoutParams.height}")
}
و بعد در متد OnResume اون رو کال کنید. مشکل برطرف خواهد شد.
override fun onResume() {
super.onResume()
//for calculate again banner slider height
calculateBannerSliderHeight()
}