您可能认为此问题与this一个问题重复。但从那时起,Android Studio已经更新,并且在那里提供的解决方案不再适用。
我正在尝试使用android studio中的图像资源设置我的应用徽标。这是因为如果我将我的应用程序徽标直接放在drawable或mipmap中,那么会导致许多问题:如果它的大小很大,则会发生应用程序崩溃,如果在oreo上运行的设备然后徽标将不会显示并且默认ic_launcher正在显示等等< / p>
在尝试使用图片资源设置我的应用徽标时,我遇到了一个问题: 我不能保持app logo的背景透明。
我有一个在photoshop中制作的png徽标,我想将其设置为我的应用徽标,我不想要任何背景,但android studio图像资产不提供删除背景的任何选项。我尝试了以下来自谷歌的解决方案:
但这些都不适合我。
这些都不起作用......请帮助我。任何帮助将不胜感激。
答案 0 :(得分:32)
Android 8.0 Oreo(API级别26)引入了adaptive launcher icons,它由两层组成:前景和背景。 The material design guidelines声明背景图层在Android O及其他中必须是不透明的,您可以在以下引文的底部看到。因此,如果您应用的targetSdkVersion为26或更高,则Android 8.0或更高版本的自适应启动器图标必须至少具有不透明的背景颜色。
https://material.io/guidelines/style/icons.html#icons-icons-for-android
Android的图标
Android O及以上
Android O图标代表设备的家庭和所有应用屏幕上的应用。以下指南描述了图标如何获得独特的视觉处理,动画和行为。
...
图层规格
图标由两层组成:前景和背景。每个图层都可以独立于其他图层设置动画和接收处理。
前景(滚动视差)
- 108 x 108 dp
- 72dp蒙面部分
- 建议使用透明度(可选)
背景(微妙视差)
- 108 X 108 dp
- 72dp蒙面部分
- 必须是不透明的
虽然8.0或更高版本的启动器图标必须具有不透明的背景颜色,但7.1或更低版本的其他传统启动器图标可以恢复为透明背景颜色,如果您可以从应用中省略round launcher icons。
shape
设置为none
,则它们将具有透明的背景色。res/mipmap/ic_laucher_round
。android:roundIcon="@mipmap/ic_launcher_round"
元素中删除属性application
。
在上面的左侧窗格中,以下XML文件定义了适用于Android 8.0或更高版本的自适应启动器图标。
如右侧窗格所示,它们引用了以下可绘制的XML文件。
在Android 8.0或更高版本中,启动器图标的背景颜色可以是透明的,如Android 8.1(Nexus 5X)屏幕截图所示。示例应用&#34; NoAdaptive&#34;对于文件夹mipmap-anydpi-v26
中的自适应启动器图标没有任何资源,而另一个应用程序&#34; Adaptive&#34;有资源。
虽然启动器图标的背景颜色在Android 8.0或更高版本中可以是透明的,但它取决于用户的启动器应用程序。某些启动器应用会将您的旧版图标转换为不透明的自适应图标。
默认启动器应用是Google Now Launcher,根据其包名com.google.android.launcher
。背景颜色可以是透明的,如Update#1的屏幕截图所示。
默认启动器应用是Pixel Launcher,根据其包名com.google.android.apps.nexuslauncher
。背景颜色在最近屏幕中可以是透明的,如下面的屏幕截图所示:
这些GMS个应用是封闭源代码:
com.google.android.launcher
Google Now Launcher com.google.android.apps.nexuslauncher
Pixel Launcher 相比之下,AOSP apps是开源的。 Android中的大多数启动器应用都基于以下启动器应用的源代码:
com.android.launcher
com.android.launcher2
com.android.launcher3
在Launcher3的git分支oreo-release中,LauncherIcons.java使用方法wrapToAdaptiveIconDrawable
将自然启动器图标包装在自适应启动器图标中。
/**
* 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;
}
标记FeatureFlags.LEGACY_ICON_TREATMENT
在FeatureFlags.java中定义:
// When enabled, icons not supporting {@link AdaptiveIconDrawable} will be wrapped in this class.
public static final boolean LEGACY_ICON_TREATMENT = true;
因此,传统启动器图标的背景颜色取决于此标志,并且在某些启动器应用中可能不透明,例如 Pixel Launcher 。
如果该标志设置为true
,则会使用R.drawable.adaptive_icon_drawable_wrapper
创建一个新的自适应启动器图标,现有的旧图标将成为其前景层。根据{{3}}:
@color/legacy_icon_background
<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>
颜色legacy_icon_background
在the resource XML file
<color name="legacy_icon_background">#FFFFFF</color>
因此,背景颜色变为白色。
答案 1 :(得分:8)
在Android 5.0中,在创建透明文件之前,图标始终具有不透明的背景。
Launcher Icons (Adaptive and Legacy)
中转到Icon Type
。Image
中选择Asset Type
,然后在Path
字段(Foreground Layer
标签)中选择图片。ic_launcher-web.png
)。Background Layer
标签中的Image
中选择Asset Type
,然后加载步骤4中的透明背景。Legacy
标签中,为所有Yes
选择Generate
,为None
选择Shape
。Foreground Layer
和Background Layer
标签中,您可以更改修剪尺寸。尽管您会在Preview
窗口中看到图像后面的黑色背景,但是在按Next
,Finish
并编译应用程序后,在Android 5,Android 8中将看到透明的背景
Here是透明图像:
答案 2 :(得分:0)
如果我没错,你有一个来自Photoshop文件的512x512像素的png文件,你想为它制作所有必要文件夹的徽标(mipmap-xxxhdpi到mipmap-mdpi)。
您也可以在使用Android Studio创建图标后使用此功能。我更喜欢用Photoshop创建我的图标。
在使用Photoshop创建512x512px图标后,我使用this site。您不仅可以为Android应用程序提供Android图标等等,而且它是免费的。图标被正确缩放,命名,并放置在zip文件的android文件夹下的mipmap文件夹中。您只需在下载并复制并粘贴后解压缩文件。我至少制作了50个图标,从未出现过问题。
答案 3 :(得分:0)
尝试这种对我有用的方法:
首先,从Image Asset创建启动器图标(Adaptive and Legacy)
:
选择一个image
作为背景图层,并将其大小调整为0%或1%,然后
在旧标签中,将shape
设置为none
。
在项目窗口中删除文件夹res/mipmap/ic_laucher_round
,然后打开AndroidManifest.xml并从android:roundIcon="@mipmap/ic_launcher_round"
元素中删除属性application
。
从ic_launcher.xml
中删除mipmap-anydpi-v26
。
注意:Nexus 5X(Android 8.1)等某些设备会自动添加白色背景,无法执行任何操作。