ورقة أسفل مخصصة: كيف ينبغي أن تعمل

مقدمة


منذ وقت ليس ببعيد ، قرأت مقالة حول ورقة القاع ، وبعد التشاور مع الزملاء ، قررت تنفيذ هذا الشيء في طلبنا. بعد قضاء ساعات كافية لتعليم "القاع السفلي" كيفية السفر في بضع خطوات (مثل خرائط Google) ، أدركت بلاغته وحدوده. تم العثور على حلين: لف كل شيء في دفق من شأنه أن يراقب حالة الستارة المطولة في الوقت الحقيقي أو لإعادة كتابة بعض أساليب فئة BottomSheetBehavior (لحسن الحظ ، يسمح لك ترخيص Apache 2.0 بالقيام بذلك). اخترت الخيار الثاني ، لأنه بدا لي أكثر قابلية للتطبيق ، والآن ، بناءً على تجربتي ، سأحاول أن أخبركم بما جاء منه. آمل أن يكون هذا مفيدًا لشخص ما. حسنًا ، لنبدأ.


التخصيص


لقد تخطيت خطوات إنشاء مشروع ، وأضفت عليه صفحة Google Bottom Sheet ، لأنه إذا قرأت هذا ، فقد تغلبت بالفعل على كل ما سبق. سنحتاج إلى الانتقال إلى فئة BottomSheetBehavior ونسخ محتوياته إلى فئة CustomBottomSheetBehavior الجديدة التي أنشأناها. بمجرد النسخ ، لا تنسَ إعادة تسمية كل شيء مميز باللون الأحمر. أيضًا ، في ملف .xml الخاص بـ BottomSheet الخاص بنا ، يجب أن نعيد تسمية هذا السطر ، في إشارة إلى صفنا الجديد ، يجب أن يتحول شيء مثل هذا:


app:layout_behavior="com.my.custombottomsheetexample.CustomBottomSheetBehavior" 

وهكذا ، لدينا أكثر من 700 سطر من شفرة Java تبدو مخيفة ، فماذا تفعل بها؟
تحتاج أولاً إلى العثور على طريقة onViewReleased ():


 public void onViewReleased(@NonNull View releasedChild, float xvel, float yvel) { ... } 

نحن بحاجة إلى تغيير بضعة أسطر. سنجد أولاً إذا {...} واستبدلنا محتوياته بهذا الرمز:


 if (yvel < 0.0F) { currentTop = releasedChild.getTop(); if (currentTop > CustomBottomSheetBehavior.this.halfExpandedOffset) { top = CustomBottomSheetBehavior.this.halfExpandedOffset; targetState = 6; } else { top = 0; targetState = 3; } } 

الآن تقدم BottomSheet الخاصة بنا على مرحلتين ، متوقفة في الوسط:


( )


تغيير الطول


ولكن هذا ليس كل شيء ، يمكنك ضبط متوسط ​​الارتفاع. للقيام بذلك ، كل ذلك في نفس الفئة ، ابحث عن تهيئة المتغير halfExpandedOffset:


 this.halfExpandedOffset = this.parentHeight / 2; 

عند النظر إلى هذا السطر ، يصبح من الواضح أنه يمكننا ضبط الارتفاع كما نرغب ، حتى من حيث النسبة المئوية. شخصيا ، فضلت تغيير مثل هذا:


 this.halfExpandedOffset = this.parentHeight * 60 / 100; 

( )


يمتد My BottomSheet إلى 40٪ من ارتفاع العرض الرئيسي. هذا كل شئ!

Source: https://habr.com/ru/post/ar452628/


All Articles