'Android: Issue with transparent activity

Recently, on one of our production apps, transparent activity has stopped working. By this I mean that it became a black background instead of transparent. When I set activity's background color to solid one (i.e. red, green etc.), it's applied w/o issues. Probably the issue was caused by migration to AndroidX, but I don't have evidences for this.

After many hours of debugging, testing and reading through related SO topics, I was finally able to identify circumstances, under which the issue is happening.

My test environment is a very simple clean project with two activities (you can check full code under the link).

Conditions for working state

I'm able to make second activity transparent only if my 'themes.xml' file is very simple. You can see first activity in the background:

enter image description here

Conditions for non-working state

It's enough to add a simple style, even without items inside and with no parents, to cause background to be black instead of transparent:

enter image description here

Here is my 'themes.xml':

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.MyApplication" parent="Theme.AppCompat.Light">
        <item name="android:windowBackground">@android:color/white</item>
    </style>

    <style name="Transparent" parent="Theme.AppCompat.Dialog">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>

    <!--    By removing this style I can make transparent activity to work -->
    <style name="ScrollViewStyle" />

</resources>

And 'AndroidManifest.xml':

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.MyApplication">
        <activity
            android:name=".SecondActivity"
            android:label="@string/title_activity_second"
            android:theme="@style/Transparent" />
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_first">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

I hope someone will be able to help me getting technical explanation of this strange behavior.



Solution 1:[1]

As a workaround, I was able to make activity transparent by setting its theme to android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen" directly in Manifest. Note 'directly', as it will not work, if I even create custom empty theme with above mentioned theme as a parent. But this solution has limitations:

  • not possible to customize behavior, like using Dialog enter/exit transition animations etc.
  • activity should extend Android Activity, and not AppCompatActivity.
  • I also had to set transparent background for a root view of this activity to achieve transparency.

Solution 2:[2]

After some refactoring (AndroidX) in a project it occurred in an activity for us when using the setLayout property. We needed the WRAP_CONTENT property from LayoutParams. But instead of importing it from WindowManager.LayoutParams it was imported from ActionBar.LayoutParams that caused the black background - no matter what style settings you had. We changed it from ActionBar to WindowManager and then it worked. Hope this may help someone out there.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Myroslav
Solution 2 Uggla