簡體   English   中英

Android Studio圖像資產啟動器圖標透明背景顏色

[英]Android Studio Image Asset Launcher Icon Transparent Background Color

你可能會想這個問題是一個重復一個。 但從那時起,Android Studio已經更新,並且在那里提供的解決方案不再適用。

我想在android studio中使用圖像資源設置我的應用程序徽標。 這是因為如果我將我的應用程序徽標直接放在drawable或mipmap中,那么會導致很多問題:如果它的大小很大,則會發生應用程序崩潰,如果在oreo上運行的設備然后徽標將不會顯示並且默認ic_launcher正在顯示等。

在嘗試使用圖片資源設置我的應用程序徽標時,我遇到了一個問題:我無法保持app徽標的背景透明。

我有一個在photoshop中制作的png徽標,我想將其設置為我的應用徽標,我不想要任何背景,但android studio圖像資產不提供任何刪除背景的選項。 我嘗試了以下來自谷歌的解決方案:

這個這個

但這些都不適合我。

嘗試的解決方案:

  1. 通過將形狀設置為無
  2. 通過從它的默認位置刪除ic_launcher_background文件
  3. 試過不同的設備

這些都不起作用......請幫助我。 任何幫助將不勝感激。

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蒙面部分
  • 必須是不透明的

7.1或更低的解決方法

雖然8.0或更高版本的啟動器圖標必須具有不透明的背景顏色,但7.1或更低版本的其他傳統啟動器圖標可以恢復為透明背景顏色,如果您可以省略應用程序中的圓形啟動器圖標

  1. 首先,創建啟動器圖標(自適應和舊版) 它將創建自適應啟動器圖標和傳統啟動器圖標。 首先,它們都具有不透明的背景顏色。
  2. 之后,創建啟動器圖標(僅限Legacy) 這將僅覆蓋現有的舊版啟動器圖標,如下面的第二個屏幕截圖所示。 如果將shape設置為none ,則它們將具有透明背景顏色。
  3. 在項目窗口中刪除文件夾res/mipmap/ic_laucher_round
  4. 打開AndroidManifest.xml並從application元素中刪除屬性android:roundIcon="@mipmap/ic_launcher_round"

步驟1

在上面的左側窗格中,以下XML文件定義Android 8.0或更高版本的自適應啟動器圖標。

  • Mip映射anydpi-V26 / ic_launcher.xml
  • Mip映射anydpi-V26 / ic_launcher_round.xml

如右側窗格所示,它們引用了以下可繪制的XML文件。

  • 繪制/ ic_launcher_background.xml
  • 可繪制-V24 / ic_launcher_foreground.xml

第2步


更新#1:

在Android 8.0或更高版本中,啟動器圖標的背景顏色可以是透明的,如Android 8.1(Nexus 5X)屏幕截圖所示。 示例應用程序“NoAdaptive”沒有任何資源用於文件夾mipmap-anydpi-v26的自適應啟動器圖標,而另一個應用程序“Adaptive”具有該資源。

Android 8.1中的主屏幕(Nexus 5X)Android 8.1中的最近屏幕(Nexus 5X)


更新#2:

雖然啟動器圖標的背景顏色在Android 8.0或更高版本中可以是透明的,但它取決於用戶的啟動器應用程序。 某些啟動器應用會將您的舊圖標轉換為不透明的自適應圖標。

在Nexus 5X設備中(Android 8.1)

根據其軟件包名稱com.google.android.launcher ,默認啟動器應用是Google Now Launcher 背景顏色可以是透明的,如Update#1的屏幕截圖所示。

在Nexus 5模擬器(Android 8.1)中

根據其軟件包名稱com.google.android.apps.nexuslauncher ,默認的啟動器應用程序是Pixel Launcher 最近”屏幕中的背景顏色可以是透明的,如下面的屏幕截圖所示:

  • 屏幕不透明
  • 在“ 最近”屏幕中透明
  • 所有應用程序屏幕中都不透明

Nexus 5仿真器中的Home,AllApps和Recents屏幕

在一些發射器應用程序中的不透明白色背景

這些GMS應用程序是封閉源:

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

相比之下, AOSP應用程序是開源的。 Android中的大多數啟動器應用都基於以下啟動器應用的源代碼:

  • com.android.launcher
  • com.android.launcher2
    • Launcher2(原包名)
  • com.android.launcher3
    • Launcher3 (適用於Android 5.0 Lollipop或更高版本)

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;
}

該標志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創建新的自適應啟動器圖標,並且現有的舊圖標將成為其前景層。 根據資源XML文件 ,背景圖層是drawable: @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_backgroundcolors.xml中定義

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

因此,背景顏色變為白色。

在Android 5.0中,在創建透明文件之前,圖標始終具有不透明的背景。

  1. 文件>新建>圖像資產。
  2. 轉到Icon Type Launcher Icons (Adaptive and Legacy)
  3. 在“ Asset Type ”中選擇“ Image ,然后在“ Path字段(“ Foreground Layer選項卡)中選擇
  4. 在PNG文件下創建或下載512x512像素大小的透明背景(這是ic_launcher-web.png的大小)。
  5. 在“ Background Layer選項卡中,選擇“ Asset Type Image並從步驟4加載透明背
  6. 在“ Legacy選項卡中,為所有Generate選擇Yes ,為Shape選擇None
  7. 在“ Foreground Layer和“ Background Layer選項卡中,您可以更改修剪大小

雖然您會在Preview窗口中看到圖像背后的黑色背景,但在按下NextFinish並編譯應用程序后,您將在Android 5,Android 8中看到透明背景。

是透明圖像:

在此輸入圖像描述

嘗試這種方式對我有用:

  1. 首先,從Image Asset創建一個啟動器圖標(Adaptive and Legacy) :為背景圖層選擇一個image ,並將其大小調整為0%或1%,並在舊版標簽中將shape設置為none

  2. 在項目窗口中刪除文件夾res/mipmap/ic_laucher_round並打開AndroidManifest.xml並從application元素中刪除屬性android:roundIcon="@mipmap/ic_launcher_round"

  3. 刪除ic_launcher.xmlmipmap-anydpi-v26

注意:某些設備(如Nexus 5X(Android 8.1)會自動添加白色背景,無法執行任何操作。

如果我沒有弄錯你有一個來自Photoshop文件的512x512像素的png文件,你想為它制作所有必要文件夾的徽標(mipmap-xxxhdpi到mipmap-mdpi)。

您也可以在使用Android Studio創建圖標后使用此功能。 我更喜歡用Photoshop創建我的圖標。

使用Photoshop創建512x512px圖標后,我使用此網站 您不僅可以為Android應用程序提供Android圖標等等,而且它是免費的。 圖標被正確縮放,命名,並放置在zip文件的android文件夾下的mipmap文件夾中。 您只需在下載並復制並粘貼后解壓縮文件。我至少制作了50個圖標,從未出現過問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM