لإخفاء عرض BottomSheet عند النقر خارجها، يمكنك استخدام الطريقة التالية:
- قم بتعريف متغير لـ
BottomSheetBehavior
:
javaBottomSheetBehavior bottomSheetBehavior;
- ابحث عن المنطقة الأساسية لـ BottomSheet وضع فيها
TouchListener
للتعرف على النقرات الخارجية:
javaView 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، فلا تقم بإغلاقها، وإذا كانت خارجها، فقم بإغلاقها. هناك كود مثالي يمكنك استخدامه:
javaView 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 والعنصر الخارجي على التوالي.
الوسوم
android NestedScrollView