आधे विस्तारित अनुपात का मान 0 और 1 अनन्य के बीच कुछ मान पर सेट होना चाहिए , इसलिए इस मान को कुछ बहुत कम संख्या पर सेट करें जो आपके झांकने की ऊंचाई से कम होना निश्चित है, "0.0001f"। इस मान के साथ आपको STATE_HALF_EXPANDED
राज्य भी नहीं देखना चाहिए । राज्यों के बीच उतार चढ़ाव हो जाएगा STATE_EXPANDED
और STATE_COLLAPSED
।
वैकल्पिक समाधान
उपरोक्त समाधान काम करता है और प्रभावी रूप से STATE_HALF_EXPANDED
राज्य को निष्क्रिय करता है, लेकिन यह हैकिश (आईएमओ) है और भविष्य में टूट सकता है। उदाहरण के लिए, क्या होगा यदि आधे विस्तारित अनुपात के लिए एक उचित मूल्य जो कि कहीं ऊंचाई के बीच है और पूरी ऊंचाई लागू है? इससे परेशानी होगी।
ओपी द्वारा बताई गई आवश्यकताएं हैं कि नीचे की शीट को ऊंचाई और पूर्ण ऊंचाई के बीच संक्रमण करना चाहिए। झांकने की ऊंचाई के साथ कोई समस्या नहीं है, लेकिन ओपी isFitToContents = false
पूर्ण ऊंचाई तक पहुंचने के लिए निर्दिष्ट करता है। (मुझे लगता है कि उसकी निचली शीट कम जगह उपलब्ध हो सकती है।)
दुर्भाग्य से, जब isFitToContents == false
एक अतिरिक्त "आधा-ऊंचाई" व्यवहार पेश किया जाता है कि ओपी बचना चाहता है और इसलिए प्रश्न।
"आधा-ऊंचाई" व्यवहार के अलावा एक और व्यवहार पेश किया गया है जो "विस्तारित ऑफसेट" है। विस्तारित ऑफसेट निर्दिष्ट करता है कि पूर्ण-स्क्रीन से नीचे की शीट कितनी दूर बंद हो जाएगी। 100f
उदाहरण के लिए, एक मान 100px
पूरी तरह से विस्तारित होने पर नीचे की शीट के शीर्ष पर एक सीमा छोड़ देगा । विस्तारित ऑफसेट के लिए डिफ़ॉल्ट शून्य है।
मैं किसी भी व्यवहार से अवगत नहीं हूं isFitToContents == false
जो ऊपर उल्लिखित के अलावा अन्य का परिचय देता है।
इसलिए, इन आवश्यकताओं को देखते हुए, क्या हम एक निचली शीट को फैशन कर सकते हैं जो कि पीक की ऊँचाई और पूरी ऊँचाई के बीच चलती है और isFitToContents == true
इस प्रकार "आधी ऊंचाई" की समस्या से बचती है? एक गैर-शून्य विस्तारित ऑफसेट के लिए कोई आवश्यकता नहीं है, इसलिए हमें इसके बारे में चिंता करने की आवश्यकता नहीं है।
यहां एक छोटा डेमो ऐप प्रदर्शित किया गया है कि हम इन आवश्यकताओं को सही तल शीट संरचना के साथ पूरा कर सकते हैं:
MainActivity5.kt
class MainActivity5 : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main5)
val bottomSheet = findViewById<LinearLayout>(R.id.bottom_sheet)
val sheetBehavior: BottomSheetBehavior<LinearLayout> = BottomSheetBehavior.from(bottomSheet)
sheetBehavior.isFitToContents = true // the default
sheetBehavior.peekHeight = 200
// Log the states the bottom sheet passes through.
sheetBehavior.addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
override fun onStateChanged(bottomSheet: View, newState: Int) {
Log.d("MainActivity", "<<<< $newState = ${translateSheetState(newState)}")
}
override fun onSlide(bottomSheet: View, slideOffset: Float) {}
})
}
}
BaseActivity.kt
open class BaseActivity : AppCompatActivity() {
protected fun translateSheetState(state: Int): String {
return when (state) {
BottomSheetBehavior.STATE_COLLAPSED -> "STATE_COLLAPSED"
BottomSheetBehavior.STATE_DRAGGING -> "STATE_DRAGGING"
BottomSheetBehavior.STATE_EXPANDED -> "STATE_EXPANDED"
BottomSheetBehavior.STATE_HALF_EXPANDED -> "STATE_HALF_EXPANDED"
BottomSheetBehavior.STATE_HIDDEN -> "STATE_HIDDEN"
BottomSheetBehavior.STATE_SETTLING -> "STATE_SETTLING"
else -> "Unknown state: $state"
}
}
}
activity_main5.xml
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_light"
android:orientation="vertical"
android:scrollbars="none"
app:layout_behavior="@string/bottom_sheet_behavior">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/short_text"
android:textSize="16sp" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
अगर हमारे पास एक लंबी तली की चादर है तो निम्न संरचना उसे स्क्रॉल करने का काम करती है:
activity_main6.xml
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_light"
android:orientation="vertical"
android:scrollbars="none"
app:layout_behavior="@string/bottom_sheet_behavior">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:text="@string/long_text"
android:textSize="16sp" />
</androidx.core.widget.NestedScrollView>
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>