解决:Android 设置 Activity 透明和页面开闭时闪烁

一、说明

我们有的时候需要添加一个透明的 Activity,在上面做一些操作,但往往会有一些问题,要么不能完全透明,要么打开和关闭时存在短暂的闪烁,会影响用户体验。我在网上搜索了一些答案,亲试很发现大多是存在问题的。最后经过一系列尝试后终于实现用户无感知透明了。

二、解决方案

1、设置 Activity 透明

在 manifest 文件中给指定 Activity 设置如下主题。

XML 复制代码
    <!-- 透明主题 可实现 Activity 完全透明 -->
    <style name="TransTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@android:color/transparent</item> <!-- 背景色透明 -->
        <item name="android:windowIsTranslucent">true</item> <!-- 是否有透明属性 -->
        <item name="android:backgroundDimEnabled">false</item> <!-- 背景是否半透明 -->
        <item name="android:statusBarColor">@android:color/transparent</item> <!-- 状态栏透明 -->
        <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item> <!-- activity窗口切换效果 -->

        <item name="android:windowNoTitle">true</item>
        <item name="android:activityOpenEnterAnimation">@null</item>
        <item name="android:activityOpenExitAnimation">@null</item>
        <item name="android:activityCloseEnterAnimation">@null</item>
        <item name="android:activityCloseExitAnimation">@null</item>
        <item name="android:windowTranslucentStatus">false</item>
    </style>

2、启动和关闭页面时闪烁问题

重写 Activity 的以下 2 个方法。

java 复制代码
    @Override
    public void overridePendingTransition(int enterAnim, int exitAnim) {
        super.overridePendingTransition(0, 0);
    }

    @Override
    public void finish() {
        super.finish();
        overridePendingTransition(0, 0);
    }
相关推荐
satadriver1 小时前
android分区和root
android
流星白龙4 小时前
【Linux】5.Linux常见指令以及权限理解(3)
android·linux
Z3r4y5 小时前
【adb】5分钟入门adb操作安卓设备
android·adb
ljh12575 小时前
【MySQL】第四章 表的操作
android·mysql·adb
TroubleMaker6 小时前
OkHttp源码学习之CertificatePinner
android·java·okhttp
ytuglt7 小时前
android framework.jar 在应用中使用
android·java·jar
achirandliu7 小时前
安卓Namespace简介
android·安卓namespace简介
Yang-Never8 小时前
Shader -> RadialGradient圆心渐变着色器详解
android·java·kotlin·android studio
BabyFish139 小时前
MySQL数据导出导入
android·mysql·adb
~yY…s<#>10 小时前
5种IO模型
android·linux·服务器·c语言·c++