6 回答
TA贡献1842条经验 获得超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贡献1155条经验 获得超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贡献1801条经验 获得超8个赞
始终展开到完整高度可以在BottomSheetDialogFragment()的onCreateDialog中设置
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val dialog = BottomSheetDialog(requireContext(), theme)
dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED
dialog.behavior.skipCollapsed = true
return dialog
}
最大高度可以在onCreateView中设置
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贡献1828条经验 获得超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贡献1796条经验 获得超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
}
从上面的情况来看,如果你设置maxHeight = WindowManager.LayoutParams.MATCH_PARENT
当您在bottmsheet上显示一些固定的内容时,这很简单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贡献1827条经验 获得超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>
添加回答
举报