BottomSheetDialog
没有提供设置最大高度的Api,所以需要我们自己手动去改变最大高度,我这里通过继承BottomSheetDialog
重写oncreate()
来实现。
我这里用的是最新的androidx
,需要导入Material Components
dependencies{
...
implementation group: 'com.google.android.material', name: 'material', version: '1.2.0-alpha02'
...
}
下面是重写后完整的类。
package com.example.myapplication;
import android.content.Context;
import android.graphics.Point;
import android.os.Bundle;
import android.view.Gravity;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import androidx.annotation.NonNull;
public class MyBottomSheetDialog extends BottomSheetDialog {
public MyBottomSheetDialog(@NonNull Context context) {
super(context);
}
public MyBottomSheetDialog(@NonNull Context context, int theme) {
super(context, theme);
}
protected MyBottomSheetDialog(@NonNull Context context, boolean cancelable, OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
final int screenHeight = getScreenHeight(getContext());
int dialogHeight;
if (screenHeight == 0) {
dialogHeight = screenHeight;
} else {
dialogHeight = ViewGroup.LayoutParams.MATCH_PARENT;
}
Window window = getWindow();
assert window != null;
//设置成沉浸式
window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, dialogHeight);
//需要设置最大高度
//你想要减去的高度,dialog默认最大高度在状态栏下方
//float reduceHeight = getContext().getResources().getDimension(R.dimen.xxx);
//window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT,dialogHeight - reduceHeight);
//最后一步是必须的,否则BottomSheetDialog会显示在屏幕中间,底部会出现空白区域
//window.setGravity(Gravity.BOTTOM);
}
/**
* 获取屏幕的高度
* @param context
* @return
*/
public static int getScreenHeight(Context context) {
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Point point = new Point();
assert wm != null;
wm.getDefaultDisplay().getSize(point);
return point.y;
}
}