البرمجة

كيفية إخفاء BottomSheet عند النقر خارجها

لإخفاء عرض BottomSheet عند النقر خارجها، يمكنك استخدام الطريقة التالية:

  1. قم بتعريف متغير لـ BottomSheetBehavior:
java
BottomSheetBehavior bottomSheetBehavior;
  1. ابحث عن المنطقة الأساسية لـ BottomSheet وضع فيها TouchListener للتعرف على النقرات الخارجية:
java
View bottomSheet = findViewById(R.id.bottom_sheet); bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet); View touchOutsideView = findViewById(R.id.touch_outside_view); touchOutsideView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { // اخفاء BottomSheet عند النقر خارجها if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) { bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } } return true; } });

في هذا المثال، يجب عليك استبدال R.id.bottom_sheet بمعرف لـ BottomSheet الخاص بك، واستبدال R.id.touch_outside_view بمعرف للعنصر الذي يجب النقر عليه لإخفاء BottomSheet.

المزيد من المعلومات

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

java
View bottomSheet = findViewById(R.id.bottom_sheet); bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet); View touchOutsideView = findViewById(R.id.touch_outside_view); touchOutsideView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN) { // احصل على موقع النقرة int[] location = new int[2]; v.getLocationOnScreen(location); float x = event.getRawX() + v.getLeft() - location[0]; float y = event.getRawY() + v.getTop() - location[1]; // احصل على حدود BottomSheet int bottomSheetTop = bottomSheet.getTop(); int bottomSheetBottom = bottomSheet.getBottom(); int bottomSheetLeft = bottomSheet.getLeft(); int bottomSheetRight = bottomSheet.getRight(); // قم بفحص موقع النقرة if (x < bottomSheetLeft || x > bottomSheetRight || y < bottomSheetTop || y > bottomSheetBottom) { // إذا كانت النقرة خارج BottomSheet، قم بإغلاقه if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_EXPANDED) { bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } } } return true; } });

تذكر أنك تحتاج إلى استبدال R.id.bottom_sheet و R.id.touch_outside_view بالمعرفات الصحيحة ل BottomSheet والعنصر الخارجي على التوالي.

زر الذهاب إلى الأعلى