一、说明
我们有的时候需要添加一个透明的 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);
}