Jay*_*ani 19 android uiimageasset android-studio-3.1
你可能会想这个问题是一个重复这一个.但从那时起,Android Studio已经更新,并且在那里提供的解决方案不再适用.
我想在android studio中使用图像资源设置我的应用程序徽标.这是因为如果我将我的应用程序徽标直接放在drawable或mipmap中,那么会导致许多问题:如果它的大小很大,则会发生应用程序崩溃,如果在oreo上运行的设备然后徽标将不显示并且默认ic_launcher正在显示等.
在尝试使用图片资源设置我的应用程序徽标时,我遇到了一个问题:我无法保持app徽标的背景透明.
我有一个在photoshop中制作的png徽标,我想将其设置为我的应用徽标,我不想要任何背景,但android studio图像资产不提供任何删除背景的选项.我尝试了以下来自谷歌的解决方案:
但这些都不适合我.
这些都不起作用......请帮助我.任何帮助将不胜感激.
qtm*_*fld 43
Android 8.0 Oreo(API级别26)引入了自适应启动器图标,它由两层组成:前景和背景.材料设计指南声明背景图层在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或更低版本的其他传统启动器图标可以恢复为透明背景颜色,如果您可以省略应用程序中的圆形启动器图标.
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)屏幕截图所示.示例应用程序"NoAdaptive"没有任何资源用于文件夹中的自适应启动器图标mipmap-anydpi-v26,而另一个应用程序"Adaptive"具有该资源.

虽然启动器图标的背景颜色在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 Launchercom.google.android.apps.nexuslauncher 像素启动器相比之下,AOSP应用程序是开源的.Android中的大多数启动器应用都基于以下启动器应用的源代码:
com.android.launcher
com.android.launcher2
com.android.launcher3
在Launcher3 的git branch 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;
}
Run Code Online (Sandbox Code Playgroud)
该标志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;
Run Code Online (Sandbox Code Playgroud)
因此,传统启动器图标的背景颜色取决于此标志,并且在某些启动器应用程序(如Pixel Launcher)中它可能是不透明的.
如果该标志设置为true,则创建一个新的自适应启动器图标R.drawable.adaptive_icon_drawable_wrapper,并且现有的旧图标将成为其前景层.背景层是drawable : @color/legacy_icon_background,根据资源XML文件:
<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>
Run Code Online (Sandbox Code Playgroud)
颜色legacy_icon_background在colors.xml中定义
<color name="legacy_icon_background">#FFFFFF</color>
Run Code Online (Sandbox Code Playgroud)
因此,背景颜色变为白色.
Ali*_*a K 10
试试这种对我有用的方法:
首先,(Adaptive and Legacy)从 Image Asset创建一个启动器图标:选择一个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))会自动添加白色背景并且无法执行任何操作。
在Android 5.0中,在我创建透明文件之前,图标始终具有不透明的背景。
Launcher Icons (Adaptive and Legacy)在Icon Type。Image在Asset Type选择照片中的Path字段(Foreground Layer标签)。ic_launcher-web.png)的PNG文件下创建或下载。Background Layer选项卡中选择Image在Asset Type与来自步骤4装入透明背景。Legacy选项卡上选择Yes的所有Generate,None对Shape。Foreground Layer和Background Layer选项卡中,您可以更改修剪尺寸。尽管您会在Preview窗口中的图像后面看到黑色背景,但是在按和编译应用程序后Next,Finish您将在Android 5和Android 8中看到透明背景。
这是透明图像: