Android Studio:为每个变体赋予自己的图标

时间:2019-06-27 11:14:57

标签: android android-studio icons android-variants

在Android Studio中,我希望每个应用变体都具有自己的图标。

我尝试了各种方法,包括这里建议的方法 How to provide different Android app icons for different gradle buildTypes? 但这不起作用

这是我在build.graddle文件中写的内容:

 flavorDimensions "marketplaceA"

    productFlavors {
        koanFlavor {
            dimension "marketplaceA"
            resValue "string", "app_name", "Koan"
            manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher"
            ]
            minSdkVersion 20
            targetSdkVersion 27
            versionCode 3
            versionName '1.1'
        }
        koanSEFlavor {
            dimension "marketplaceA"
            resValue "string", "app_name", "Koan SE"
            manifestPlaceholders = [
                    appIcon: "@mipmap/ic_launcher"
            ]
            minSdkVersion 20
            targetSdkVersion 27
            versionCode 3
            versionName '1.1'
        }
        } 

而且,由于我在每个变体中都拥有相同的资源:

  • 我没有为每个变体制作一个res文件夹

  • 我用两个版本的xml和png文件填充了主res文件夹的mipmapXXX文件夹

,但是当我在模拟器中运行应用程序时,该图标未显示 (奇怪的是,它确实仅在我的盾牌K1平板电脑上显示,我尝试过的所有其他分屏器均未显示该图标)

更新:

我只是尝试将mipmapXXX文件夹添加到每个variants文件夹中,在每个资源上保持完全相同的名称,只是更改了png的内容,但仍然...

我的问题可能出自我的launcher.xml吗?

<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@drawable/ic_launcher_background" />
    <foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

在Android Studio中,当您打开ic_launcher.xml文件时,您会在Previewx标签中看到该图标。 现在,我只看到默认图标:S

更新II:

问题是我寻求将每个变体放入build.gradle的解决方案

    manifestPlaceholders = [
            appIcon: "@mipmap/ic_launcher"
    ]

,然后将2个ic_launcher文件放置在默认文件夹中。 我必须添加清单

 android:icon="${appIcon}"

我认为这是一个不好的解决方案:(

我现在正在尝试使用@ W0rmH0le解决方案,但有些地方不正确

如何摆脱自适应图标的青睐,而不是使用简单的图标?

最终更新:

@ W0rmH0le和@Derek的提示确实有所帮助,但是以下信息可能对我解决问题有很大帮助:

1)AS中的“新建”->“图像资产”用户界面是唯一的选择,您可以一次又一次使用它,尝试找到所需的图标

2)完成图像资产用户界面后,执行“构建->清理项目”和“构建->重建项目”

3)在此阶段,您最好使用自适应图标,因为如果您不运行应用程序,系统可能会将您的图标变成丑陋的

4)由于您使用的是自适应图标,因此请勿尝试使用透明的背景。图片素材资源界面可以很好地显示它,但自适应图标背景不支持透明性

5)最后,要获得2个版本的图标,我在常规过程中添加了一个图标,然后前往资源管理器将mipmapXXX文件夹复制到一个安全的位置。 然后我以常规方式添加了另一个图标。要完成它,我将保存的mipmap文件夹粘贴到@ W0rmH0le提到的variante文件夹树中

1 个答案:

答案 0 :(得分:0)

最简单的方法是为每种口味创建一个新的资源文件夹。

例如:

\src
  | 
  | -- \main
  |      |
  |      | --- \res -> Here, you place all default and common icons
  |
  | -- \koanFlavor
  |      |
  |      | --- \res -> Add only the icons that are different from default one
  | 
  | -- \koanSEFlavor 
  |      |
  |      | --- \res -> If you have one icon that are different from main and koanFlavor, you can place here

观察:这些图标是不同的,但是它们应该具有相同的名称。

您无需为每种口味创建一个文件夹...即使您有2种口味,也无需创建2个其他文件夹(koanFlavorkoanSEFlavor)。您可以将一种口味的所有图标放在主文件夹中。这样,您只需要创建一个其他文件夹来支持其他样式即可。

您也不需要复制所有图标。在flavor的文件夹中,您只应添加与主文件夹不同的那些图标。

编辑

您的图标是通过gradle定义的:

manifestPlaceholders = [
        appIcon: "@mipmap/ic_launcher"
]

这是ic_laucher,将用作启动器图标。因此,ic_launcher.png是您应移至特定文件夹的图标