چرا وقتی به یک صفحه دیگر میرویم و دوباره به صفحه خانه بر میگردیم بنراسلایدر ما بهم میریزید.؟
حتی وقتی سایز ثابت هم به ارتفاع میدم باز همین مشکل وجود دارد؟
مشکل از فرسکو است؟
سلام و احترام
در جلسات آینده این موارد برطرف میشن
در یکی از ویدیوها استاد اشاره میکنند که در انتها ویدیویی ضبط خواهند کرد برای رفع باگ ها.
بهترین پاسخ
پوریا شفیعی۰۳ بهمن ۱۳۹۹، ۱۶:۴۲
بسیار عالی.
فعلا ارتفاعی که استاد در فرگمنت محاسبه کردند را کامنت کردم و ارتفاع ثابت دادم مشکل رفع شد.
علی خدری۰۳ بهمن ۱۳۹۹، ۲۲:۳۵
از constraint layout استفاده کن بجای frame layout اتربیوت app:layout_constraintDimensionRatio رو برای view pager ست کن دیگه نیازی هم به محاسبه طول و عرض نداری view به طور خودکار تو دیوایسای مختلف برا اساس ابعاد صفحه نمایش سایزش تغییر میکنه
برای برطرف شدن باگ باید دوباره ارتفاع رو محاسبه کنید.. چون موقعی که بین تبها جا به جا میشید ویو از بین میره و دوباره به وجود میاد و قبل از اینکه استیبل بشه لایو دیتای 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()
}