要让Android的BottomSheetDialogFragment
出现在系统/手势栏后面,你需要调整其窗口属性,使其在布局层次上位于系统UI元素之下。以下是实现这一效果的基础概念和相关步骤:
BottomSheetDialogFragment
:
首先,你需要创建一个继承自BottomSheetDialogFragment
的自定义类。BottomSheetDialogFragment
中,重写onCreateDialog
方法,并设置窗口的LayoutParams
,使其位于系统UI之下。以下是一个示例代码,展示了如何实现这一功能:
import android.app.Dialog;
import android.os.Bundle;
import androidx.annotation.NonNull;
import com.google.android.material.bottomsheet.BottomSheetDialog;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;
public class CustomBottomSheetDialogFragment extends BottomSheetDialogFragment {
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
BottomSheetDialog dialog = (BottomSheetDialog) super.onCreateDialog(savedInstanceState);
// 设置窗口属性,使其位于系统UI之下
dialog.getWindow().setFlags(
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
);
dialog.getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
);
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
return dialog;
}
}
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
:这个标志使得窗口不会获得焦点,从而不会干扰系统UI的交互。View.SYSTEM_UI_FLAG_LAYOUT_STABLE
:保持布局稳定,避免系统UI变化时影响应用布局。View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
和 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
:使布局延伸到导航栏和状态栏后面。View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
:启用沉浸模式,并使系统UI在用户交互时自动隐藏。通过上述步骤和代码示例,你可以实现让BottomSheetDialogFragment
出现在系统/手势栏后面的效果。
领取专属 10元无门槛券
手把手带您无忧上云