मैं एक कस्टम लेआउट के साथ BottomSheetDialogFragment का उपयोग कर रहा हूं। मैं निम्नलिखित सेटअप करने की कोशिश कर रहा हूं:

<TextView> -> pinned to the top of the bottom sheet
<RecyclerView> -> wrap_content 
<Button> -> pinned to the bottom of the bottom sheet

TextView और Button दोनों को हर समय (चिपचिपा) दिखना चाहिए, जबकि RecyclerView को बीच में रहना चाहिए और अन्य दृश्यों को अस्पष्ट किए बिना स्क्रॉल करना चाहिए।

यह मेरा अब तक का लेआउट है:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Title"
        app:layout_constraintBottom_toTopOf="@id/recyclerView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        app:layout_constrainedHeight="true"
        app:layout_constraintBottom_toTopOf="@id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/title" />

    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

वस्तुओं की एक छोटी सूची के साथ यह ऐसा दिखता है, जहां RecyclerView को स्क्रॉल करने की कोई आवश्यकता नहीं है।

enter image description here

वस्तुओं की एक बड़ी सूची के साथ यह ऐसा दिखता है। शीर्षक शीर्ष पर टिका रहता है, लेकिन बटन नहीं। बटन वास्तव में दिखाई भी नहीं देता है, भले ही मैं पूरी तरह से नीचे स्क्रॉल करूं।

enter image description here

मेरे लिए अजीब बात यह है कि यह वही लेआउट नियमित पूर्ण स्क्रीन गतिविधि के साथ काम करता है, लेकिन यह किसी तरह BottomSheetFragment के साथ विफल हो जाता है।

मैंने पहले ही अन्य पोस्ट देख लिए हैं, लेकिन उनमें से किसी ने भी मदद नहीं की उदा।

-1
aarnaut 4 नवम्बर 2021, 13:28
मेरे उत्तर पर एक नज़र डालें; अगर यह आपके साथ काम नहीं करता है; कृपया अपनी BottomSheetDialogFragment की अपनी कस्टम कक्षा पोस्ट करें
 – 
Zain
5 नवम्बर 2021, 01:13

3 जवाब

सबसे बढ़िया उत्तर

अंत में समाधान होने के कारण नीचे की शीट की स्थिति को विस्तारित करने के लिए सेट किया जा रहा है।

val bottomSheetDialog = requireDialog() as BottomSheetDialog
bottomSheetDialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED

मुझे लगता है कि नीचे की शीट कभी भी पूरी तरह से विस्तारित नहीं हुई, इसलिए लेआउट कभी भी पूरी तरह से दिखाई नहीं दे रहा था। मैंने सोचा था कि सामग्री की ऊंचाई के आधार पर नीचे की शीट अपने आप फैल जाएगी, लेकिन मैं गलत था। लेआउट अपने आप में ठीक है, मुझे इसमें कोई बदलाव करने की जरूरत नहीं है।

0
aarnaut 5 नवम्बर 2021, 16:15

रिसाइकलर व्यू की ऊंचाई रैप_कंटेंट नहीं होनी चाहिए

यदि आप अपने शीर्षक और पाद लेख के बीच में पुनरावर्तक चाहते हैं, तो बेहतर तरीका ऊंचाई = 0 सेट करना है और इसके शीर्ष को नीचे के शीर्षक पर और इसके नीचे को पाद लेख के शीर्ष पर पिन करें (जैसे आपने पहले ही किया था), यह आपके लिए स्वतः खिंचाव होगा

0
Kiet Phan 4 नवम्बर 2021, 16:41
दुर्भाग्य से, यह मदद नहीं करता है। RecyclerView दोनों के बीच में टूट जाता है और यह बिल्कुल भी दिखाई नहीं देता है।
 – 
aarnaut
4 नवम्बर 2021, 16:02

आपको app:layout_constraintBottom_toTopOf="@id/recyclerView" को TextView से हटाना होगा, क्योंकि यह इसे RecyclerView और शीर्ष स्क्रीन के बीच केंद्रित कर देगा।

बाधा से मेल खाने के लिए RecyclerVeiw की ऊंचाई भी बनाएं ताकि इसका शीर्ष TextView के नीचे से चिपके और इसका निचला भाग Button से चिपके। अगर यह wrap_content है, तो यह टेक्स्टव्यू और बटन के बीच केंद्रित होगा; यह भी कि यदि आइटम निर्दिष्ट स्थान से अधिक हैं; तो वे टेक्स्ट व्यू और बटन के साथ ओवरलैप हो जाएंगे।

इसे लागू करना:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Title"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constrainedHeight="true"
        app:layout_constraintBottom_toTopOf="@id/button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/title" />

    <Button
        android:id="@+id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>
0
Zain 4 नवम्बर 2021, 16:59