Activity全屏且背景透明设置

本文详细介绍了如何在Android应用中设置Activity的主题为透明全屏,并实现沉浸式效果。通过修改AndroidManifest.xml中的Activity主题属性,以及在Activity中调用特定的API,可以隐藏状态栏,使应用界面更加沉浸,提升用户体验。

1、Activity主题属性设置为透明全屏:

<activity android:name=".MainActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">

2、设置沉浸式:

setContentView(mDisappearingDoodleView);
Window window = this.getWindow();
View decorView = window.getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
        View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);

 

沉浸式标记位讲解:参考https://www.jianshu.com/p/ce65dc7b0b56

 

在 Android 开发中,实现全屏 `PopupWindow` 并设置透明背景是一个常见的需求,尤其在需要弹出对话框或全屏遮罩层时。以下是一种实现方案: ### 1. 创建全屏 PopupWindow 为了实现全屏效果,需要将 `PopupWindow` 的宽度和高度设置为匹配父布局(即屏幕的宽高): ```java PopupWindow popupWindow = new PopupWindow(context); popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); popupWindow.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); ``` ### 2. 设置透明背景 `PopupWindow` 本身不支持直接设置透明背景,因此需要通过设置一个带有透明颜色的 `View` 作为其内容视图。例如,可以使用一个 `FrameLayout` 并设置背景透明: ```java FrameLayout popupLayout = new FrameLayout(context); popupLayout.setBackgroundColor(Color.TRANSPARENT); // 设置透明背景 popupWindow.setContentView(popupLayout); ``` 也可以通过 XML 定义一个透明背景的布局文件,并加载该布局作为内容视图。 ### 3. 显示 PopupWindow 要显示全屏透明的 `PopupWindow`,可以将其锚定在一个根布局上: ```java View rootView = ((Activity) context).getWindow().getDecorView().findViewById(android.R.id.content); popupWindow.showAtLocation(rootView, Gravity.CENTER, 0, 0); ``` ### 4. 兼容性处理 某些设备(如华为手机)可能对透明背景的 `PopupWindow` 支持不佳。为了解决这个问题,可以通过设置 `PopupWindow` 的背景为 `ColorDrawable` 并使用 `setOutsideTouchable(true)` 来确保透明背景正常显示: ```java popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); popupWindow.setOutsideTouchable(true); popupWindow.setFocusable(true); ``` ### 5. 添加内容与交互 可以在 `popupLayout` 中添加其他 UI 元素(如按钮、文本等),并为其设置点击事件或其他交互逻辑。 ### 示例代码 以下是一个完整的示例代码: ```java public void showFullScreenTransparentPopup(Context context) { // 创建 PopupWindow 布局 FrameLayout popupLayout = new FrameLayout(context); popupLayout.setBackgroundColor(Color.TRANSPARENT); // 创建 PopupWindow PopupWindow popupWindow = new PopupWindow(context); popupWindow.setContentView(popupLayout); popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT); popupWindow.setHeight(ViewGroup.LayoutParams.MATCH_PARENT); popupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); popupWindow.setOutsideTouchable(true); popupWindow.setFocusable(true); // 显示 PopupWindow View rootView = ((Activity) context).getWindow().getDecorView().findViewById(android.R.id.content); popupWindow.showAtLocation(rootView, Gravity.CENTER, 0, 0); } ``` ### 6. 关闭 PopupWindow 可以通过调用 `dismiss()` 方法来关闭 `PopupWindow`: ```java popupWindow.dismiss(); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值