6 回答

TA貢獻(xiàn)1842條經(jīng)驗 獲得超21個贊
BottomSheetDialogFragment:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val offsetFromTop = 200
(dialog as? BottomSheetDialog)?.behavior?.apply {
isFitToContents = false
setExpandedOffset(offsetFromTop)
state = BottomSheetBehavior.STATE_EXPANDED
}
}

TA貢獻(xiàn)1155條經(jīng)驗 獲得超0個贊
你可以這樣做:
public class MyBottomSheetDialog extends BottomSheetDialogFragment {
//....
@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setOnShowListener(new DialogInterface.OnShowListener() {
@Override public void onShow(DialogInterface dialogInterface) {
BottomSheetDialog bottomSheetDialog = (BottomSheetDialog) dialogInterface;
setupRatio(bottomSheetDialog);
}
});
return dialog;
}
private void setupRatio(BottomSheetDialog bottomSheetDialog) {
//id = com.google.android.material.R.id.design_bottom_sheet for Material Components
//id = android.support.design.R.id.design_bottom_sheet for support librares
FrameLayout bottomSheet = (FrameLayout)
bottomSheetDialog.findViewById(R.id.design_bottom_sheet);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
ViewGroup.LayoutParams layoutParams = bottomSheet.getLayoutParams();
layoutParams.height = getBottomSheetDialogDefaultHeight();
bottomSheet.setLayoutParams(layoutParams);
behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
}
private int getBottomSheetDialogDefaultHeight() {
return getWindowHeight() * 85 / 100;
}
private int getWindowHeight() {
// Calculate window height for fullscreen use
DisplayMetrics displayMetrics = new DisplayMetrics();
((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
return displayMetrics.heightPixels;
}
}

TA貢獻(xiàn)1801條經(jīng)驗 獲得超8個贊
始終展開到完整高度可以在BottomSheetDialogFragment()的onCreateDialog中設(shè)置
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = BottomSheetDialog(requireContext(), theme)
dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED
dialog.behavior.skipCollapsed = true
return dialog
}
最大高度可以在onCreateView中設(shè)置
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.bottom_sheet_dialog, container, false)
// Set max height to half screen
view.findViewById<ConstraintLayout>
(R.id.root_layout_of_bottom_sheet).maxHeight =
(resources.displayMetrics.heightPixels * 0.5).toInt()
return view
}

TA貢獻(xiàn)1828條經(jīng)驗 獲得超4個贊
在 Kotlin 和 Jetpack 中編寫:
val configuration = LocalConfiguration.current
val screenWidth = configuration.screenWidthDp.divideToPercent(0.40f) // total screen width size of 40 percentage
val screenHeight = configuration.screenHeightDp.divideToPercent(0.95f) // total screen height size of 95 percentage
configuration.screenWidth --> 給出屏幕尺寸
divideToPercent(0.40f) --> 它將給出屏幕上的一些百分比

TA貢獻(xiàn)1796條經(jīng)驗 獲得超10個贊
非常容易處理
開始吧
override fun onStart() {
super.onStart()
val height = Resources.getSystem().displayMetrics.heightPixels
// in this case I want set max height half of the device height
val maxHeight = (height * 0.5).toInt()
val behaviour = BottomSheetBehavior.from(requireView().parent as View)
/* Note that If you want to display max height
as per your bottomsheet view
val maxHeight = WindowManager.LayoutParams.MATCH_PARENT */
// now set your max peek height
behavior.peekHeight = maxHeight
}
從上面的情況來看,如果你設(shè)置maxHeight = WindowManager.LayoutParams.MATCH_PARENT
當(dāng)您在bottmsheet上顯示一些固定的內(nèi)容時,這很簡單onCreateView但是有時如果更新UI后Main Thread 它可能不會顯示實際高度有時那么最好使用viewTreeObserver
override fun onStart() {
super.onStart()
view?.viewTreeObserver?.addOnGlobalLayoutListener {
val behavior = BottomSheetBehavior.from(view!!.parent as View)
behavior.peekHeight = WindowManager.LayoutParams.MATCH_PARENT
}
}

TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊
嘗試這個 :
DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics();
int height = displayMetrics.heightPixels;
int maxHeight = (int) (height*0.80);
View bottomSheet = findViewById(R.id.bottom_sheet);
BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet);
behavior.setPeekHeight(maxHeight);
并在您的 XML 中:
<LinearLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:behavior_hideable="true"
app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
.
.
.
</LinearLayout>
添加回答
舉報