Android去掉处于全屏模式的提示

文章讨论了如何在Android系统中,针对`ImmersiveModeConfirmation`类,移除应用初次进入全屏模式时出现的提示对话框,通过处理SHOW和HIDE消息来实现这一功能。

应用设置为全屏状态时,第一次进入应用时会有个“目前处于全屏模式,要退出,请从顶部向下滑动。” 对话框,把这个提示框给去掉

--- a/android/frameworks/base/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java
+++ b/android/frameworks/base/
Android 中退出全屏模式并处理弹窗(Popup)可以通过操作 `Window` 和 `View` 的相关属性来实现。以下是一个完整的解决方案: ### 退出全屏模式 Android 中的全屏模式通常通过隐藏状态栏和导航栏来实现,可以通过修改 `Window` 的标志位来退出全屏模式: ```java // 退出全屏模式 View decorView = getWindow().getDecorView(); decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN ); ``` 如果之前是通过设置全屏标志进入全屏模式,可以使用如下代码恢复默认状态: ```java // 恢复状态栏和导航栏可见性 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); ``` ### 处理弹窗 弹窗通常包括 `AlertDialog`、自定义的 `PopupWindow` 或者 `DialogFragment`。为了确保弹窗能够正常显示,需要保证当前界面的 UI 层级不会被全屏模式影响。 #### 使用 AlertDialog 显示弹窗 ```java new AlertDialog.Builder(this) .setTitle("提示") .setMessage("是否确认退出全屏?") .setPositiveButton("确定", (dialog, which) -> { // 用户点击确定后执行退出全屏操作 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); }) .setNegativeButton("取消", null) .show(); ``` #### 使用 PopupWindow 显示自定义弹窗 ```java // 创建一个简单的布局作为弹窗内容 TextView popupContent = new TextView(this); popupContent.setText("这是一个弹窗"); popupContent.setBackgroundColor(getColor(android.R.color.white)); popupContent.setPadding(20, 20, 20, 20); // 创建 PopupWindow 并显示 PopupWindow popupWindow = new PopupWindow(popupContent, 500, 300, true); popupWindow.showAtLocation(findViewById(android.R.id.content), Gravity.CENTER, 0, 0); ``` #### DialogFragment 示例 创建一个继承 `DialogFragment` 的类,并重写 `onCreateDialog()` 方法: ```java public class MyDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { return new AlertDialog.Builder(requireContext()) .setTitle("标题") .setMessage("这是通过 DialogFragment 显示的弹窗") .setPositiveButton("确定", (dialog, which) -> { // 点击确定后的操作 }) .create(); } } ``` 在 Activity 中调用该弹窗: ```java MyDialogFragment dialogFragment = new MyDialogFragment(); dialogFragment.show(getSupportFragmentManager(), "MyDialogTag"); ``` ### 注意事项 - **UI 状态同步**:退出全屏模式时,建议将 `SYSTEM_UI_FLAG_LOW_PROFILE` 和其他系统 UI 标志一并清除,以避免冲突。 - **动画与过渡效果**:可以结合 `Transition` 或 `ValueAnimator` 实现平滑的退出全屏动画。 - **生命周期管理**:在 `onResume()` 和 `onPause()` 中动态控制全屏状态,以适配不同的用户交互场景。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值