【问题标题】:Cannot set different icon/label to application and launcher activity from manifest无法为清单中的应用程序和启动器活动设置不同的图标/标签
【发布时间】:2013-06-19 13:32:07
【问题描述】:

我知道之前有人问过这个问题,但所有问题的答案都是从活动的 onCreate 方法设置它。 我不想在我的 onCreate 方法中执行此操作,因此我对清单文件执行了此操作,但无济于事:-

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher_screen"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Holo.Light"
         >
        <activity
            android:name="com.iws.unify.HomeScreen"
            android:label="@string/nullstring"
            android:icon="@drawable/ic_launcher"
             >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

出于某种原因,我在活动中设置的任何图标/标签都会覆盖应用程序标签中的图标/标签,这很烦人。请帮忙。

【问题讨论】:

标签: android android-layout android-manifest


【解决方案1】:

如果您只需要一个与应用程序图标不同的活动操作栏图标,您可以使用“android:logo”属性覆盖它:

    <activity
        android:name="com.iws.unify.HomeScreen"
        android:label="@string/nullstring"
        android:logo="@drawable/ic_launcher">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

【讨论】:

  • 最简单的解决方案,不会增加太多开销。效果很好!
【解决方案2】:

我遇到了同样的问题,我用一个非常奇怪但简单的解决方案解决了。

1-创建一个新的activity并命名为LauncherActivity。(设置这个activity的图标和标签你想要显示的应用程序图标/标签)

2- 将此活动设置为您应用的主要活动和启动器活动。(从您的 HomeScreen 活动中删除 &lt;intent-filter&gt; 标记)

3- 设置本次活动的主题为android:theme="@android:style/Theme.Translucent"

4- 现在在您的 LauncherActivity onCreate() 中不要做任何事情,只需使用意图启动 HomeScreen 活动并完成此活动即可。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = new Intent(this, HomeScreen.class);
    startActivity(intent);
    finish();
}

finish() 是必需的,因此当您按下 HomeScreen 中的返回按钮时,应用程序将关闭。

现在您的应用图标和标签将不同于您的主屏幕图标和标签

您的清单应如下所示:

<application
    android:allowBackup="true"
    android:theme="@android:style/Theme.Holo.Light"
     >
    <activity
        android:name="com.iws.unify.HomeScreen"
        android:label="@string/nullstring"
        android:icon="@drawable/ic_launcher"
         >
    </activity>

    <activity
        android:name="com.iws.unify.LauncherActivity"
        android:icon="@drawable/ic_launcher_screen"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Translucent" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

【讨论】:

  • 这一点都不奇怪。其实这是我遇到同样情况后的第一个想法。
【解决方案3】:

答案:

移除 android 活动中的图标。

额外信息:

带有 Activity 启动器的主要 Activity 将由 android 运行时考虑。

例如: 如果您在两个活动“a”和“b”中声明以下代码:

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

然后您的应用程序将有两个启动器图标“a”和“b”。

【讨论】:

  • 很抱歉我没听懂。如果我有两个启动器活动,它将如何解决我的问题?
  • 添加额外的活动不是解决方案......只是我觉得我很困惑......@NewOverHere,只需删除活动中的图标属性。
  • 但我想为我的应用程序和主要活动设置不同的图标。根据您的建议,我最终会得到相同的应用程序图标和活动图标。感谢您的帮助。还有其他建议吗?
  • 但是你想要两个不同的图标..我很好奇
  • 因为我的图标是带有透明背景的蓝色+红色文本,在操作栏中看起来很棒,但由于壁纸的原因在主屏幕上不可读。所以我为应用程序图标设置了白色背景,为操作栏设置了没有背景的原始图标。
【解决方案4】:

您也可以使用“活动别名”:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Holo.Light">

    <activity
        android:name="com.iws.unify.HomeScreen"
        android:label="@string/nullstring"
        android:exported="true" />             

    <activity-alias
        android:name=".LaucherActivityAlias"
        android:targetActivity="com.iws.unity.HomeScreen"
        android:icon="@drawable/ic_launcher_screen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

</application>

您的“playstore”图标将是应用程序节点中指定的图标,因此您也可以根据需要这样做:

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher_screen"
    android:label="@string/app_name"
    android:theme="@android:style/Theme.Holo.Light">

    <activity
        android:name="com.iws.unify.HomeScreen"
        android:label="@string/nullstring"
        android:icon="@drawable/ic_launcher"
        android:exported="true" />             

    <activity-alias
        android:name=".LaucherActivityAlias"
        android:targetActivity="com.iws.unity.HomeScreen"
        android:icon="@drawable/ic_launcher_screen">
        <intent-filter>
        <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity-alias>

</application>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-30
    • 2017-03-02
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多