如何使Android应用程序图标背景透明?

6

要将PNG图像用作图标前景,背景应完全透明。

在Asset Studio的Android Studio > New Image Asset > Configure Image Asset dialog中使用,试过了所有背景选项的虚拟组合,包括从路径中完全删除文件并删除ic_launcher.xmlic_launcher_round.xml中的背景标签。

在向导中从路径中删除文件并从XML文件中删除标记几乎可以解决问题,但是仍会剩下一些微弱的黑色轮廓线(~alpha=20%)。所有其他的背景层选项在查看设备启动器上的图标时都会留下明显的白色或黑色背景。

许多应用程序成功地在它们的图标上仅使用前景,这是可能的。我在这里做错了什么?

更新:感谢快速评论!我尝试了提供的两个答案,结果相同。建议上传屏幕截图。

仅更新向导中的传统图标是不够的,因为那只改变了传统图标格式。还需要新的“自适应”图标。即使将背景设置为完全透明的正方形png,Android Studio也会将其更改为白色。如果完全删除背景文件,则向导允许完成,但然后Android Studio使用略带不透明的黑色背景,如所示。关于上传的图像,前景后面应该没有东西,完全是灰色的,在这种情况下没有任何可见的圆。

API 25设备运行时的屏幕截图


1
如果您想询问关于投票反对的事情,请在评论中进行。这不是大多数人感兴趣的,他们不会登录或投票。大多数要求解释投票的呼声都会被投票者忽略,所以我建议您忽略它。该内容与编程有关。 - halfer
1
@halfer 如果能知道帖子出了什么问题就好了,否则我只能受到空洞的指责而无法改进。 - apsommer
当然,在评论中也可以。你会发现有时候你会收到莫名其妙的负评,但如果你长期使用该网站并且你的贡献是好的,你的工作将会得到更多的赞同票而不是反对票。只有在我受到非常严重的负评时才会尝试弄清楚原因。你也可以在_Meta_网站上讨论这个问题,但对于单个的负评,答案将是“我们不知道” :-) - halfer
@halfer 哇,你的语言自信文章非常详尽,并且有很多评论。我需要一些时间来吸收关于论坛帖子礼仪的兴趣和意见水平!我的下一个问题将不会以任何键盘上的血、汗和泪水为前提。 ;) - apsommer
是的,这里的核心社区真的致力于在教学/努力/质量的平衡上做到最好。这是一个艰难的平衡,当然,在研究这些问题时我们不能避免考虑人类心理因素。话虽如此,在这种情况下我们不能确定这是单个DV的原因。 - halfer
显示剩余4条评论
3个回答

11

方法一:

如果您有一个PNG图像,只需将其复制并粘贴到drawable目录中,并从清单文件中引用图片名称。

<application
        android:allowBackup="true"
        android:icon="@mipmap/new_image"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/new_image"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        ....
        </application>

方法2:

前往文件>新建>图像资产,确保您选择了一个PNG图片(带有透明背景)并将背景形状设置为无。

输入图像描述


1
对我有效的解决方案是同时实现这两种方法。 - apsommer
1
非常感谢@AmirDe,因为方法1拯救了我的一天,我已经点赞了。 - Ravi Vaniya

2

首先,您需要一个背景图像才能获得没有任何背景图像的透明图标。如果没有背景图像,您无法使您的图标透明。

如果您想要获得透明图像,您可以使用一些图片编辑器来实现。


0

获取imageButton的视图

View v = findViewById(R.id.myImageBtn);

从应用程序(例如 Chrome)获取图标
pkgnam="com.android.chrome";
Intent intent1 = ctx.getPackageManager().getLaunchIntentForPackage(pgknam);
Drawable myIcon = getPackageManager().getActivityIcon(intent1);

将背景图标设置为与前景图标相同

v.setForeground(myIcon);
v.setBackground(myIcon);

Context ctx; ctx = this; 上下文 ctx; ctx = this; - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接