آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

آموزش جاوا و اندروید

یادداشت های یک برنامه نویس معمولی

طبقه بندی موضوعی

BottomSheet

يكشنبه, ۲۳ آذر ۱۳۹۹، ۰۱:۲۶ ق.ظ

دو نوع BottomSheet داریم:

 Persistent Bottom Sheet و Modal Bottom Sheet

 

Persistent Bottom Sheet

 

این جزئی از لیوت هست.

برای تعریف شی ای از جنس BottomSheetBehavior تعریف کرده و به صورت زیر مقدار دهی میکنیم:

bottomSheetBehavior = BottomSheetBehavior.from(bottom_sheet_filter);

bottom_sheet_filter روت لیوت Bottom Sheet هست. (مثلا constraint layout)

در این حالت Bottom Sheet استیت های مختلفی داره. از جمله:

- COLLAPSED: میره پاییین فقط مقداری که تعریف شده بالا میمونه

- EXPANDED: کلا باز میشه

- HIDDEN: کلا میره پایین

- dragging: بالا و پایین شدن

- SETTLING: قبل از رسیدن به مقدار نهایی expand یا collapsed

توضیحات بیشتر

 

 

بنابراین از طریق متدهای setState یا getState میشه استیت های مختلفی برای Bottom Sheet ست کرد.

Bottom Sheet در این حالت یک کال بک برای حالت های مختلف باز و بسته شدن به صورت زیر دارد:

    bottomSheetBehavior.addBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            if (newState == BottomSheetBehavior.STATE_HIDDEN) {

                bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
            }
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {

            Log.d(TAG, "onSlide is calling, slideOffset: " + slideOffset);
            if (slideOffset > 0) {

                rotateBottomSheetArrows(slideOffset);
            }

        }
    });

}

private void rotateBottomSheetArrows(float slideOffset) {

    leftArrow.setRotation(slideOffset * 180); // چرخش پاد ساعتگرد 
    rightArrow.setRotation(slideOffset * -180); // چرخش ساعتگرد

}

توی قسمت اول این کال بک من گفتم اگر کاربر Bottom Sheet رو پایین فرستاد collapsed بشه.

 

متد onSlide میزان آفست را در حین بالا کشیدن Bottom Sheet نشون میده.

در استیت hidden میزان slideOffset برابر -1 بوده، در استیت collapsed این مقدار صفر و در استیت expanded این مقدار 1 هست.

 

در کد بالا من دو تا arrow توی Bottom Sheet گذاشتم که با بالا و پایین رفتن Bottom Sheet مقدار 180 درجه در جهت عکس همدیگه میپرخن.

اینجا در مورد این آفست توضیح داده

 

Modal Bottom Sheet

تقریبا مثال دیالوگ میمونه. فوکوس صفحه رو میگیره. با زدن روی قسمت های دیگه صفحه یا پایین کشیدنش هاید میشه.

نیازی به coordinator layout نداره، چون قسمتی از لیوت اصلی نیست.

در اینجا کلاس دیالوگ رو از BottomSheetDialogFragment اکستند کرده و ویوی مورد نظر را inflate میکنیم.

برای نمایش در اکتیویتی از این کلاس نیو کرده و show رو فراخونی میکنیم.

 

منابع آموزشی:

1

2

3

اینجا انیمیشین های قشنگی برای بالا کشیدن باتن شیت توضیح داده (با استفاده از آفست)

موافقین ۰ مخالفین ۰ ۹۹/۰۹/۲۳
میم دال

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی