Android Studio Image Asset Launcher Icon Transparent Background Color
Asked Answered
L

4

32

You might be thinking this question is a duplicate of this one. But since then, Android Studio has been updated and the solution given there is not working anymore.

I am trying to set my app logo using image asset in android studio. This is because if I put my app logo directly in drawable or mipmap, then it causes many problems like: If it's size is big then app crash occurs, if device running on oreo then logo will not showed and default ic_launcher is showing etc.

While trying to set my app's logo using image asset, I am facing a problem: I can't keep app logo's background transparent.

I have a png logo made in photoshop and I want to set this as my app logo and I don't want any background but android studio image asset doesn't provide any option to remove background. I tried following solutions from google:

this and this

but none of these worked for me.

Tried solutions:

  1. By setting shape to none
  2. by Deleting ic_launcher_background file from it's default location
  3. Tried in different devices

None of these works...please help me. Any help will be appreciated.

Lennon answered 1/4, 2018 at 11:56 Comment(1)
import the same image again in the background layer and set its size less than the first imageAgueweed
J
55

Android 8.0 Oreo (API level 26) introduced adaptive launcher icons, which consist of two layers: a foreground and a background. The material design guidelines state that the background layer must be opaque in Android O and beyond, as you can see at the bottom of the following citation. So, the adaptive launcher icon for Android 8.0 or higher must have opaque background color at least, if targetSdkVersion of your app is 26 or higher.

https://material.io/guidelines/style/icons.html#icons-icons-for-android

Icons for Android

Android O and beyond

Android O icons represent your app on a device's Home and All Apps screens. The following guidelines describe how icons can receive unique visual treatments, animations, and behaviors.

...

Layer specs

Icons consist of two layers: a foreground and a background. Each layer can animate and receive treatments independently from the other layer.

Foreground (scrolling parallax)

  • 108 x 108 dp
  • 72dp masked section
  • Transparency recommended (optional)

Background (subtler parallax)

  • 108 X 108 dp
  • 72dp masked section
  • Must be opaque

Workaround for 7.1 or lower

Although launcher icons for 8.0 or higher must have opaque background color, the other legacy launcher icons for 7.1 or lower can revert to transparent background color, if you can omit round launcher icons from your app.

  1. First, create Launcher Icons (Adaptive and Legacy). It will create adaptive launcher icons and legacy launcher icons. All of them have opaque background color, at first.
  2. After that, create Launcher Icons (Legacy only). This will overwrite only the existing legacy launcher icons, as you can see in the second screenshot below. If you set the shape to none, they will have transparent background color.
  3. Delete folder res/mipmap/ic_laucher_round in the project window.
  4. Open AndroidManifest.xml and remove attribute android:roundIcon="@mipmap/ic_launcher_round" from the application element.

STEP 1

In the left-side pane above, the following XML files define adaptive launcher icons for Android 8.0 or higher.

  • mipmap-anydpi-v26/ic_launcher.xml
  • mipmap-anydpi-v26/ic_launcher_round.xml

As seen in the right-side pane, they refer to the following drawable XML files.

  • drawable/ic_launcher_background.xml
  • drawable-v24/ic_launcher_foreground.xml

STEP 2


Update #1:

In Android 8.0 or higher, the background color of launcher icons can be transparent, as shown in the Android 8.1 (Nexus 5X) screenshots. The sample app "NoAdaptive" is without any resource for the adaptive launcher icons in folder mipmap-anydpi-v26, and the other app "Adaptive" has the resource.

Home screen in Android 8.1 (Nexus 5X) Recents screen in Android 8.1 (Nexus 5X)


Update #2:

Although the background color of launcher icon can be transparent in Android 8.0 or higher, it depends on user’s launcher app. Some launcher apps will convert your legacy icon to opaque adaptive icon.

In Nexus 5X device (Android 8.1)

The default launcher app is Google Now Launcher, according to its package name com.google.android.launcher. The background color can be transparent, as in the screenshots of Update #1.

In Nexus 5 emulator (Android 8.1)

The default launcher app is Pixel Launcher, according to its package name com.google.android.apps.nexuslauncher. The background color can be transparent in Recents screen, as in the screenshots below:

  • opaque in Home screen
  • transparent in Recents screen
  • opaque in All Apps screen

Home, AllApps and Recents screens in Nexus 5 emulator

Opaque white background in some launcher apps

These GMS apps are closed-source:

  • com.google.android.launcher Google Now Launcher
  • com.google.android.apps.nexuslauncher Pixel Launcher

In contrast, AOSP apps are open-source. Most launcher apps in Android are based on the source code of the following launcher apps:

  • com.android.launcher
  • com.android.launcher2
    • Launcher2 (original package name)
  • com.android.launcher3
    • Launcher3 (for Android 5.0 Lollipop or higher)

Launcher3 source code

In the git branch oreo-release of Launcher3, LauncherIcons.java has the method wrapToAdaptiveIconDrawable that wraps legacy launcher icon in adaptive launcher icon.

/**
 * If the platform is running O but the app is not providing AdaptiveIconDrawable, then
 * shrink the legacy icon and set it as foreground. Use color drawable as background to
 * create AdaptiveIconDrawable.
 */
static Drawable wrapToAdaptiveIconDrawable(Context context, Drawable drawable, float scale) {
    if (!(FeatureFlags.LEGACY_ICON_TREATMENT && Utilities.isAtLeastO())) {
        return drawable;
    }
    try {
        if (!(drawable instanceof AdaptiveIconDrawable)) {
            AdaptiveIconDrawable iconWrapper = (AdaptiveIconDrawable)
                    context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate();
            FixedScaleDrawable fsd = ((FixedScaleDrawable) iconWrapper.getForeground());
            fsd.setDrawable(drawable);
            fsd.setScale(scale);
            return (Drawable) iconWrapper;
        }
    } catch (Exception e) {
        return drawable;
    }
    return drawable;
}

The flag FeatureFlags.LEGACY_ICON_TREATMENT is defined in FeatureFlags.java:

// When enabled, icons not supporting {@link AdaptiveIconDrawable} will be wrapped in this class.
public static final boolean LEGACY_ICON_TREATMENT = true;

So, the background color of legacy launcher icon depends on this flag, and it can be opaque in some launcher apps such as Pixel Launcher.

The background color

If the flag is set to true, a new adaptive launcher icon is created with R.drawable.adaptive_icon_drawable_wrapper, and the existing legacy icon becomes its foreground layer. The background layer is a drawable: @color/legacy_icon_background, according to the resource XML file:

<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/legacy_icon_background"/>
    <foreground>
        <com.android.launcher3.graphics.FixedScaleDrawable />
    </foreground>
</adaptive-icon>

The color legacy_icon_background is defined in colors.xml

<color name="legacy_icon_background">#FFFFFF</color>

So, the background color becomes white.

Jaala answered 5/4, 2018 at 8:9 Comment(7)
So, there is no official or tricky way to make app icon having transparent background in android 8.0 and higher?Lennon
I've been thinking over your suggestion, and revised my answer. I hope it works for you.Jaala
+1 for your great effort man.I have deleted resources from mipmap-anydpi-v26 and I am trying app on nexus 5 emulator having android 8.1. but it still gives same output. having white background in my logo in round shape. by the way thank you very much for your great support.Lennon
Thanks for voting up and I really appreciate the bounty from you. Yes, you are right. Some launcher apps can make white background for legacy launcher icon. I inspected the source code of current AOSP launcher apps, and updated my answer again.Jaala
Excellent answer. Anyway, i didn't tested my app according to your update #2 but it's great explanation.Lennon
I think this is an excellent answer, and I am touched by the effort and intelligent analyse of this topic that is commercially very important for all of us. This even though the answer is no way transparency will work under certain conditions. It is very useful information. The topic turns into a strategic commercial political issue for the future of the Android launchers. I can't see there are limitations in the ambitions of adaptive icons having transparent background. I hope politics change for the commercial feature of transparent icons. Only possible in change in the launchers.Harald
just do it in eclipse and move it to androidstudio folders. very simplePankey
B
20

In Android 5.0 an icon always got an opaque background until I created a transparent file.

  1. File > New > Image Asset.
  2. Turn to Launcher Icons (Adaptive and Legacy) in Icon Type.
  3. Choose Image in Asset Type and select your picture inside Path field (Foreground Layer tab).
  4. Create or download below a PNG file with transparent background of 512x512 px size (this is a size of ic_launcher-web.png).
  5. In Background Layer tab select Image in Asset Type and load the transparent background from step 4.
  6. In Legacy tab select Yes for all Generate, None for Shape.
  7. In Foreground Layer and Background Layer tabs you can change trim size.

Though you will see a black background behind the image in Preview window, after pressing Next, Finish and compiling an application you will see a transparent background in Android 5, Android 8.

Here is the transparent image:

enter image description here

Brakesman answered 28/11, 2018 at 15:19 Comment(2)
nope..there is a black outline around the icon which looks weirdSeroka
@ShikharJaiswal, it's strange. Could you post an image and write a device name, OS version?Brakesman
D
9

Try this way that worked for me:

  1. First, create a launcher icon (Adaptive and Legacy) from Image Asset: Select an image for background layer and resize it to 0% or 1% and In legacy tab set shape to none.

  2. Delete folder res/mipmap/ic_laucher_round in the project window and Open AndroidManifest.xml and remove attribute android:roundIcon="@mipmap/ic_launcher_round" from the application element.

  3. Delete ic_launcher.xml from mipmap-anydpi-v26.

Note: Some devices like Nexus 5X (Android 8.1) adding a white background automatically and can't do anything.

Dvinsk answered 7/4, 2019 at 7:28 Comment(0)
L
1

If i didn't get you wrong you have a png file with 512x512 px from a Photoshop file and you want to make logo from it for all necessary folders (mipmap-xxxhdpi to mipmap-mdpi).

You can also use this after creating icon using Android Studio too. I prefer creating my icons using Photoshop.

I use this site after creating a 512x512px icon using Photoshop. You can have icons not only for Android also for iPhone apps and and more and it's free. Icons are scaled correctly, named, and placed inside mipmap folders under android folder of the zip file. You just unzip the file after downloading and copy and paste.I made 50 icons at least and never had a problem.

Loathsome answered 7/4, 2018 at 15:19 Comment(4)
did you tried your app on device having oreo after making icon using this site? Does it shows transparent background in oreo?Lennon
In emulator it does. But i don't have an actual device with Android 8.0. Output from this site is mipmap folders and icons like you create manually. It just scales, names, and creates required folders without any work.Loathsome
You get mipmap folders as result, you don't keep png file in assets folder.Loathsome
No, it's not working perfectly on oreo. It shows white background in logo while i have just uploaded png logo having transparent background on site.Lennon

© 2022 - 2024 — McMap. All rights reserved.