অর্ধেক প্রসারিত অনুপাত মান 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>