[Android] 创建透明的Activity

10,662 阅读1分钟

在开发中,我们有时需要一个透明的Activity作为DeepLink事件分发的中转,参考了一些文章,并进行了实践,有两种方法可以满足需求。

1. 使用Android自带的Theme.Translucent

@android:style/Theme.Translucent
@android:style/Theme.Translucent.NoTitleBar
@android:style/Theme.Translucent.NoTitleBar.Fullscreen

AndroidManifest中直接使用即可:

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

这个方法使用简单,如果只是开发简单需求,是用这种方式更为快捷。

但也有它的不足:

  • TranslucentActivity只能继承原生的Activity才能使用Theme.Translucent而不能继承AppCompatActivity,但我们现在开发使用androix包会继承AppCompatActivity
  • 不能灵活定制style,如statusBar不能设置成透明

2. 使用自定义Theme

<style name="TranslucentStyle" 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窗口切换效果 -->
</style>

AndroidManifest中使用:

<activity
    android:name="TranslucentActivity"
    android:theme="@style/TranslucentStyle" />

这样自定义Theme,TranslucentActivity可以继承AppCompatActivity,且能更灵活的配置Activity style属性。

参考文档:

Android设置Activity背景为透明style的方法

Android 创建透明Activity