बॉटमशीटडायलॉगफ्रेगमेंट की स्थिति को विस्तारित करने के लिए सेट करें


98

एंड्रॉइड सपोर्ट डिज़ाइन लाइब्रेरी (v23.2.1) का BottomSheetDialogFragmentउपयोग BottomSheetBehavior#setState(STATE_EXPANDED)करके विस्तारित किए गए टुकड़े के राज्य को आप कैसे सेट करते हैं ?

https://code.google.com/p/android/issues/detail?id=202396 कहता है:

नीचे की शीट को पहले STATE_COLLAPSED पर सेट किया गया है। यदि आप इसका विस्तार करना चाहते हैं, तो बॉटमशीटबिएवर # setState (STATE_EXPANDED) को कॉल करें। ध्यान दें कि आप लेआउट देखने से पहले विधि को कॉल नहीं कर सकते।

सुझाव दिया अभ्यास के लिए एक दृश्य पहले फुलाया किए जाने की आवश्यकता है, लेकिन मुझे यकीन है कि मैं कैसे एक टुकड़ा पर BottomSheetBehaviour सेट करेंगे नहीं कर रहा हूँ ( BottomSheetDialogFragment)।

View bottomSheet = coordinatorLayout.findViewById(R.id.bottom_sheet);  
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);  

जवाबों:


234

"ध्यान दें कि आप लेआउट देखने से पहले विधि को कॉल नहीं कर सकते।"

उपरोक्त पाठ सुराग है।

डायलॉग में एक श्रोता होता है जिसे डायलॉग दिखाने के बाद निकाल दिया जाता है । यदि यह निर्धारित नहीं किया गया है तो संवाद नहीं दिखाया जा सकता है।

इसलिए, onCreateDialog()अपने मोडल बॉटम शीट में ( BottomSheetFragment), संवाद को वापस करने से पहले (या कहीं भी, एक बार जब आप संवाद का संदर्भ लेते हैं), कॉल करें:

// This listener's onShow is fired when the dialog is shown
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
    @Override
    public void onShow(DialogInterface dialog) {

        // In a previous life I used this method to get handles to the positive and negative buttons
        // of a dialog in order to change their Typeface. Good ol' days.

        BottomSheetDialog d = (BottomSheetDialog) dialog;

        // This is gotten directly from the source of BottomSheetDialog
        // in the wrapInBottomSheet() method
        FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);

        // Right here!
        BottomSheetBehavior.from(bottomSheet)
            .setState(BottomSheetBehavior.STATE_EXPANDED);
    }
});

मेरे मामले में, मेरा रिवाज BottomSheetनिकला:

@SuppressWarnings("ConstantConditions")
public class ShareBottomSheetFragment extends AppCompatDialogFragment {

    @NonNull @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        BottomSheetDialog dialog =
                new BottomSheetDialog(getActivity(), R.style.Haute_Dialog_ShareImage);

        dialog.setContentView(R.layout.dialog_share_image);

        dialog.findViewById(R.id.cancel).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });

        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                BottomSheetDialog d = (BottomSheetDialog) dialog;

                FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
                BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
            }
        });

        SwitchCompat switchview = (SwitchCompat) dialog.findViewById(R.id.switchview);
        switchview.setTypeface(FontCache.get(dialog.getContext(), lookup(muli, NORMAL)));

        return dialog;
    }
}

मुझे बताएं क्या इससे मदद मिलती है।

अपडेट करें

ध्यान दें कि आप ओवरराइड भी कर सकते हैं BottomSheetDialogFragment:

public class SimpleInitiallyExpandedBottomSheetFragment extends BottomSheetDialogFragment {

    @NonNull @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);

        dialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                BottomSheetDialog d = (BottomSheetDialog) dialog;

                FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
                BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
            }
        });

        // Do something with your dialog like setContentView() or whatever
        return dialog;
    }
}

लेकिन मैं वास्तव में नहीं देखता कि कोई ऐसा क्यों करना चाहेगा क्योंकि आधार BottomSheetFragmentरिटर्न के अलावा कुछ नहीं करता है BottomSheetDialog

ANDROIDX के लिए अद्यतन

AndroidX का उपयोग करते समय, पहले पाया गया संसाधन android.support.design.R.id.design_bottom_sheetअब पाया जा सकता है com.google.android.material.R.id.design_bottom_sheet


धन्यवाद, मैंने यह तरीका आजमाया। यह BottomSheetDialogFragmentदिखाई देने वाले बर्फ़ीले (खुलने वाले एनीमेशन में फ़्रेम को छोड़ता है) बनाता है क्योंकि यह ढहते हुए विस्तारित व्यवहार से जाता है। संपादित करें: Android
मार्शमैलो

1
यह मेरे लिए पूरी तरह से काम करता है। कोई लंघन नहीं। क्या आप केवल एक संवाद को वापस करने के अलावा कुछ और कर रहे हैं? सराहना करेंगे यदि आप अपनी पोस्ट को अपने कोड से अपडेट करते हैं तो मेरे पास एक बेहतर आइडिया हो सकता है।
efemoney

5
यह सिर्फ मुझे मिल रहा android.support.design.Rहै समर्थन पुस्तकालयों को अद्यतन करने के बाद पैकेज नहीं मिल रहा है?
नातारियो

2
मुझे android.support.design.R@natario की तरह ही हल करने में भी दिक्कतें आ रही हैं । मैं उपयोग कर रहा हूं implementation "com.google.android.material:material:1.0.0"। मैं भी इस परियोजना में AndroidX का उपयोग कर रहा हूँ।
hsson

24
AndroidX का उपयोग करते समय संसाधन com.google.android.material.R.id.design_bottom_sheet
तत्काल

46

हालांकि, आप अपने बॉटमशीट को बनाने के लिए onCreateDialog () के साथ जाने का विरोध करते हुए , यदि आप onCreateView () का उपयोग करना चाहते हैं, तो efeturi का उत्तर बहुत अच्छा है, यहां वह कोड है जिसे आपको अपने CreateView () विधि के तहत जोड़ना होगा :

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    getDialog().setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            BottomSheetDialog d = (BottomSheetDialog) dialog;
            View bottomSheetInternal = d.findViewById(android.support.design.R.id.design_bottom_sheet);
            BottomSheetBehavior.from(bottomSheetInternal).setState(BottomSheetBehavior.STATE_EXPANDED);
        }
    });
    return inflater.inflate(R.layout.your_bottomsheet_content_layout, container, false);
}

3
वैकल्पिक रूप से आपको getDialog पर कॉल करने की आवश्यकता नहीं है। मुझे लगता है कि यह करने के लिए सबसे अच्छा तरीका है दोनों onCreateView और onCreateDialog को ओवरराइड करना है। OnCreateView (जैसा कि आप किसी भी टुकड़े के साथ होगा) में अपना दृष्टिकोण बनाएँ और
onCreateDialog में डायल

2
इससे मेरा दिन बचता है। धन्यवाद।
AndroidRuntimeException

अगर onCreateDialog का उपयोग किया जाता है तो @Stimsoni onCreateView को नहीं बुलाया जाता है। डेवलपर
.android.com

1
@Vincent_Paing, हाँ यह है। आपके संलग्न लिंक में यह लिखा है कि 'onCreateView को कार्यान्वित करने की आवश्यकता नहीं है'। यह नहीं कहता कि इसे नहीं कहा जाएगा। स्रोत कोड यहाँ github.com/material-compenders/material-compenders-android/blob/… पर एक नज़र डालें । डिफ़ॉल्ट कार्यान्वयन कॉल onCreateDialog नीचे शीट बनाने के लिए और ऊपर दिए गए प्रत्येक समाधान अभी भी onCreateView का उपयोग कर रहा है जिसका अर्थ है कि वे दोनों हमेशा कहलाते हैं। यदि आप इसे ओवरराइड करते हैं, तो बस सुनिश्चित करें कि आप अभी भी सुपर.ऑनक्रीटडायलॉग () कहते हैं।
स्टिमसनसी

बॉटमशीटडायलॉगफ्रैगमेंट में यह मुझे onCreateView में क्रैश कर देता है () मैंने इसे onViewCreated () में डाल दिया और यह एकदम सही है! धन्यवाद
avisper

21

एक सरलीकृत और सुरुचिपूर्ण समाधान:

BottomSheetDialogFragment इसे संबोधित करने के लिए उपवर्गित किया जा सकता है:

class NonCollapsableBottomSheetDialogFragment extends BottomSheetDialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        final BottomSheetDialog bottomSheetDialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);

        bottomSheetDialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                FrameLayout bottomSheet = bottomSheetDialog.findViewById(com.google.android.material.R.id.design_bottom_sheet);

                BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
                behavior.setSkipCollapsed(true);
                behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
            }
        });
        return bottomSheetDialog;
    }
}

इसलिए इस वर्ग का विस्तार करें BottomSheetDialogFragment अपनी खुद की निचली शीट बनाने के ।

ध्यान दें

बदलें com.google.android.material.R.id.design_bottom_sheetकरने के लिए android.support.design.R.id.design_bottom_sheetकरता है, तो अपनी परियोजना पुरानी Android समर्थन लाइब्रेरी का उपयोग करता है।


1
के com.google.android.material.Rबजाय अब लगता है android.support.design.R
एपिकपांडाफोर्स

@EpicPandaForce ज़रूर। Google पर Android टीम ने हाल ही में पूर्व समर्थन लाइब्रेरी को रद्द कर दिया।
DYS

4

मुझे लगता है कि ऊपर वाले बेहतर हैं। अफसोस की बात यह है कि मैंने हल करने से पहले उन समाधानों को नहीं पाया। लेकिन मेरा हल लिखो। सभी के लिए समान।

================================================== ================================

मैं उसी मुद्दे का सामना करता हूं। यही मैंने हल किया। व्यवहार बॉटमशीटडायलॉग में छिपा हुआ है, जो व्यवहार को प्राप्त करने के लिए उपलब्ध है यदि आप अपने माता-पिता के लेआउट को कोरिडेटेटआउट होने के लिए नहीं बदलना चाहते हैं, तो आप यह कोशिश कर सकते हैं।

चरण 1: बॉटमशीटडायलॉगफ्रैगमेंट को कस्टमाइज़ करें

open class CBottomSheetDialogFragment : BottomSheetDialogFragment() {
   //wanna get the bottomSheetDialog
   protected lateinit var dialog : BottomSheetDialog 
   override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
      dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
      return dialog
   }

   //set the behavior here
   fun setFullScreen(){
      dialog.behavior.state = STATE_EXPANDED
   }
}

चरण 2: अपने टुकड़े को इस अनुकूलित टुकड़े का विस्तार करें

class YourBottomSheetFragment : CBottomSheetDialogFragment(){

   //make sure invoke this method after view is built
   //such as after OnActivityCreated(savedInstanceState: Bundle?)
   override fun onStart() {
      super.onStart()
      setFullScreen()//initiated at onActivityCreated(), onStart()
   }
}

3
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                BottomSheetDialog d = (BottomSheetDialog) dialog;

                FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
                BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
            }
        });

मैं NullPointException में मिला BottomSheetBehavior.from(bottomSheet)क्योंकिd.findViewById(android.support.design.R.id.design_bottom_sheet) रिटर्न अशक्त है।

यह बहुत अजीब है। मैं DEBUG मोड में एंड्रॉइड मॉनिटर में घड़ियों की कोड की इस पंक्ति को जोड़ता हूं और पाया गया कि यह सामान्य रूप से फ्रैमेलेयआउट लौटाता है।

यहां wrapInBottomSheetबॉटमशीटडायलॉग का कोड दिया गया है:

private View wrapInBottomSheet(int layoutResId, View view, ViewGroup.LayoutParams params) {
        final CoordinatorLayout coordinator = (CoordinatorLayout) View.inflate(getContext(),
                R.layout.design_bottom_sheet_dialog, null);
        if (layoutResId != 0 && view == null) {
            view = getLayoutInflater().inflate(layoutResId, coordinator, false);
        }
        FrameLayout bottomSheet = (FrameLayout) coordinator.findViewById(R.id.design_bottom_sheet);
        BottomSheetBehavior.from(bottomSheet).setBottomSheetCallback(mBottomSheetCallback);
        if (params == null) {
            bottomSheet.addView(view);
        } else {
            bottomSheet.addView(view, params);
        }
        // We treat the CoordinatorLayout as outside the dialog though it is technically inside
        if (shouldWindowCloseOnTouchOutside()) {
            coordinator.findViewById(R.id.touch_outside).setOnClickListener(
                    new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            if (isShowing()) {
                                cancel();
                            }
                        }
                    });
        }
        return coordinator;
    }

कभी-कभी, मैंने पाया कि R.id.design_bottom_sheetइसके बराबर नहीं हैandroid.support.design.R.id.design_bottom_sheet । अलग-अलग R.java में उनका अलग-अलग मूल्य है।

इसलिए मैं बदल android.support.design.R.id.design_bottom_sheetजाता हूं R.id.design_bottom_sheet

dialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialog) {
                BottomSheetDialog d = (BottomSheetDialog) dialog;

                FrameLayout bottomSheet = (FrameLayout) d.findViewById(R.id.design_bottom_sheet); // use R.java of current project
                BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
            }
        });

अब और नहीं NullPointException।


3

BottomsheetDialogFragmentराज्य में लागू करें onResumeइस मुद्दे को हल करेंगे

@Override
public void onResume() {
    super.onResume();
    if(mBehavior!=null)
       mBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}

onShow(DialogInterface dialog)और postDelayedएनीमेशन गड़बड़ का कारण हो सकता है


2

सॉफ्ट कीबोर्ड प्रदर्शित होने पर ऑनशॉ () का उपयोग करने के साथ सभी परिणाम यादृच्छिक रेंडर बग का कारण बनते हैं। स्क्रीनशॉट देखें bellow - बॉटमशीट डायलॉग स्क्रीन के निचले भाग में नहीं है, लेकिन इसे कीबोर्ड की तरह प्रदर्शित किया गया है। यह समस्या हमेशा नहीं होती है, लेकिन अक्सर होती है।

यहां छवि विवरण दर्ज करें

अपडेट करें

निजी सदस्य के प्रतिबिंब के साथ मेरा समाधान अनावश्यक है। सॉफ्ट कीबोर्ड छुपाने के बाद डायलॉग बनाने और दिखाने के लिए पोस्टडेलिड (लगभग 100 एमएस के साथ) का उपयोग करना बेहतर समाधान है। फिर onShow () के साथ उपरोक्त समाधान ठीक हैं।

Utils.hideSoftKeyboard(this);
mView.postDelayed(new Runnable() {
    @Override
    public void run() {
        MyBottomSheetDialog dialog = new MyBottomSheetDialog();
        dialog.setListener(MyActivity.this);
        dialog.show(getSupportFragmentManager(), TAG_BOTTOM_SHEET_DLG);
    }
}, 100);

इसलिए मैं अन्य समाधान को लागू करता हूं, लेकिन इसके लिए प्रतिबिंब का उपयोग करने की आवश्यकता है, क्योंकि बॉटमशीटडायलॉग में सभी सदस्य निजी हैं। लेकिन यह बग को प्रस्तुत करता है। BottomSheetDialogFragment वर्ग केवल AppCompatDialogFragment onCreateDialog विधि के साथ होता है, जो कि BottomSheetDialog बनाता है। मैं AppCompatDialogFragment का अपना बच्चा बनाता हूं जो मेरी क्लास बनाता है बॉटमशीटडायलॉग का विस्तार करता है और जो निजी व्यवहार के सदस्य तक पहुंच बनाता है और इसे STATE_EXPANDED अवस्था में ऑनस्टार्ट विधि में सेट करता है।

public class ExpandedBottomSheetDialog extends BottomSheetDialog {

    protected BottomSheetBehavior<FrameLayout> mBehavior;

    public ExpandedBottomSheetDialog(@NonNull Context context, @StyleRes int theme) {
        super(context, theme);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        try {
            Field privateField = BottomSheetDialog.class.getDeclaredField("mBehavior");
            privateField.setAccessible(true);
            mBehavior = (BottomSheetBehavior<FrameLayout>) privateField.get(this);
        } catch (NoSuchFieldException e) {
            // do nothing
        } catch (IllegalAccessException e) {
            // do nothing
        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        if (mBehavior != null) {
            mBehavior.setSkipCollapsed(true);
            mBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        }
    }
}


public class AddAttachmentBottomSheetDialog extends AppCompatDialogFragment {

    ....

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new ExpandedBottomSheetDialog(getContext(), getTheme());
    }

    ....
}

2
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return super.onCreateDialog(savedInstanceState).apply {
        setOnShowListener {
            (this@TipsBottomDialogFragment.dialog as BottomSheetDialog).behavior.setState(
                BottomSheetBehavior.STATE_EXPANDED
            )
        }
    }
}

2

भविष्य के पाठकों के लिए यहां पोस्ट करना, जैसा कि मुझे लगता है कि अब हम एक और समाधान का उपयोग कर सकते हैं।

मैं उसी समस्या को हल करने की कोशिश कर रहा था जिसे आपने वर्णित किया था BottomSheetDialog

मुझे आंतरिक एंड्रॉइड आईडी का उपयोग करना पसंद नहीं है और मैंने अभी पाया है कि अंदर एक विधि है BottomSheetDialog getBehavior कि इसके जिसका आप उपयोग कर सकते हैं:

आप इसे अपने अंदर उपयोग कर सकते हैं BottomSheetDialog:

behavior.state = BottomSheetBehavior.STATE_EXPANDED

BottomSheetDialogFragmentआप का उपयोग करके उस DialogFragment से संवाद को एक ही कास्टिंग कर सकते हैं BottomSheetDialog


1

सबसे आसान तरीका मैं कार्यान्वित के रूप में नीचे हम पा रहे हैं, यहाँ android.support.design.R.id.design_bottom_sheet और नीचे चादर राज्य की स्थापना के रूप में विस्तार

इसके बिना, मेरी निचली शीट हमेशा COLLAPSED अवस्था में अटकी रहती थी , यदि दृश्य ऊंचाई स्क्रीन की ऊँचाई 0.5 से अधिक हो और मुझे पूर्ण नीचे शीट देखने के लिए मैन्युअल रूप से स्क्रॉल करना पड़े।

class BottomSheetDialogExpanded(context: Context) : BottomSheetDialog(context) {

    private lateinit var mBehavior: BottomSheetBehavior<FrameLayout>

    override fun setContentView(view: View) {
        super.setContentView(view)
        val bottomSheet = window.decorView.findViewById<View>(android.support.design.R.id.design_bottom_sheet) as FrameLayout
        mBehavior = BottomSheetBehavior.from(bottomSheet)
        mBehavior.state = BottomSheetBehavior.STATE_EXPANDED
    }

    override fun onStart() {
        super.onStart()
        mBehavior.state = BottomSheetBehavior.STATE_EXPANDED
    }
}

1

Uregentx उत्तर के समान , कोटलिन में , आप अपने अंश वर्ग को घोषित कर सकते हैं , जो इससे विस्तृत होता है BottomSheetDialogFragment, और जब दृश्य बनाया जाता है तो आप संवाद प्रदर्शित होने के बाद संवाद श्रोता डिफ़ॉल्ट स्थिति सेट कर सकते हैं।

STATE_COLLAPSED: नीचे की शीट दिखाई दे रही है, लेकिन केवल इसकी झलक ऊंचाई दिखा रही है।

STATE_EXPANDED: नीचे की शीट दिखाई दे रही है और इसकी अधिकतम ऊंचाई है।

STATE_HALF_EXPANDED: नीचे की शीट दिखाई दे रही है, लेकिन केवल इसकी आधी ऊंचाई दिखा रही है।

class FragmentCreateGroup : BottomSheetDialogFragment() {
      ...

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,savedInstanceState: Bundle?): View? {
        // Set dialog initial state when shown
        dialog?.setOnShowListener {
            val bottomSheetDialog = it as BottomSheetDialog
            val sheetInternal: View = bottomSheetDialog.findViewById(com.google.android.material.R.id.design_bottom_sheet)!!
            BottomSheetBehavior.from(sheetInternal).state = BottomSheetBehavior.STATE_COLLAPSED
        }

        val view = inflater.inflate(R.layout.fragment_create_group, container, false)
        ...

        return view
    }
}

ग्रेडेल में सामग्री डिजाइन कार्यान्वयन का उपयोग करना याद रखें।

implementation "com.google.android.material:material:$version"

इसके अलावा सामग्री के संदर्भ के नीचे की शीट्स पर एक नज़र डालें


dialog?OnCreateView में चर कहाँ से आता है?
एरिक स्मिथ

dialogवर्ग की एक संपत्ति है DialogFragment, वास्तव में एक गेट्टर है। इस उदाहरण में मैंने उस गेट्टर का उपयोग वर्तमान डायलॉगफ्रेगमेंट इंस्टेंस और इसके setOnShowListenerलिए किया। हो सकता है कि आप पहले से ही अपनी परियोजना में इस तरह के निर्देशों का उपयोग कर चुके हों, उदाहरण के लिए एक गतिविधि में, एक्शन बार actionBaractionBar?.subtitle = "abcd"
गेटटर

1

मेरा उत्तर कमोबेश उक्त उत्तर के रूप में मामूली संशोधन के साथ है। बजाय नीचे शीट दृश्य को खोजने के लिए findViewById का उपयोग करने के बजाय, मैंने भविष्य में बदलने के बाद से किसी भी रूपरेखा दृश्य संसाधन आईडी को हार्डकोड नहीं करना पसंद किया है।

setOnShowListener(dialog -> {
            BottomSheetBehavior bottomSheetBehavior = ((BottomSheetDialog)dialog).getBehavior();
            bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        });

1

बॉटमशीटडायलॉगफ्रैगमेंट :

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    (dialog as? BottomSheetDialog)?.behavior?.state = STATE_EXPANDED
}

या जब दिखाने के लिए तैयार हों:

private fun onContentLoaded(items: List<Any>) {
    adapter.submitList(items)
    (dialog as? BottomSheetDialog)?.behavior?.state = STATE_EXPANDED
}

1

अपने कोटलिन बॉटमशीटडायलॉगफ्रैगमेंट क्लास में, नीचे दिए गए ऑनक्रिएटडियल को ओवरराइड करें

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val bottomSheetDialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
        bottomSheetDialog.setOnShowListener {
            val bottomSheet =
                bottomSheetDialog.findViewById<FrameLayout>(
                    com.google.android.material.R.id.design_bottom_sheet
                )
            val behavior = BottomSheetBehavior.from(bottomSheet!!)
            behavior.skipCollapsed = true
            behavior.state = BottomSheetBehavior.STATE_EXPANDED
        }
        return bottomSheetDialog
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.