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;
}
}