AndroidManifest.xml之动态修改应用的图标和应用名称

本文介绍如何利用AndroidManifest.xml中的activity-alias标签实现应用图标和名称的动态更换,适用于促销活动等场景。通过设置主Activity的别名并在需要时启用,可以轻松更改应用的外观。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、activity-alias标签

Android支持动态修改应用程序的图标和应用名称。如双11双12的时候淘宝和京东等APP在不需要更新的情况下自动更换了图标,所以动态更新应用的图标和名称的最佳应用场景就像电商类项目的促销活动时使用。
Android之所以支持动态更新图标是因为在AndroidManifest.xml中有一个activity-alias标签,从标签名字上就能看出这是activity的别名。我们看官网的介绍,
https://developer.android.com/guide/topics/manifest/activity-alias-element.html

An alias for an activity, named by the targetActivity attribute. The target must be in the same application as the alias and it must be declared before the alias in the manifest. 

大致意思是 :这是属性targetActivity:的activity的别名,这个属性targetActivity:的activity跟这个别名必须在同一个application下,并且targetActivity必须在这个别名钱定义。

下面看看这个activity-alias标签都有那些属性

    <activity-alias android:enabled=["true" | "false"]
                    android:exported=["true" | "false"]
                    android:icon="drawable resource"
                    android:label="string resource"
                    android:name="string"
                    android:permission="string"
                    android:targetActivity="string" >
        . . .
    </activity-alias>

好多属性都跟activity标签的属性一致的,主要看定义的时候提到的targetActivity属性,这个属性的值是你要用别名代替的那个activity,而且这个activity必须在这个activity-alias之前定义。这里说一点,如果我们想动态的更换图标和改名称,就必须是申明`

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>` 这个启动activity的别名,在别名里面修改。

二、动态修改图标和名称

1、设置launch activity的别名:

<activity android:name=".MainActivity"
            android:icon="@mipmap/ic_launcher"
            >

            <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity-alias
            android:name=".Test"
            android:enabled="false"
            android:icon="@mipmap/launch_01"
            android:label="测试应用名称"
            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

这里设置了mainactivity的别名,在activity-alias中修改icon和label属性,修改成想要更换的图标和名称,这个name就是别名的名字,在activity中就是activity的类名。一定不能漏掉android:targetActivity=".MainActivity"属性。

2、在需要更换的地方操作

首先我在布局文件中activity_main.xml定义一个简单的按钮,当点击的时候更换图标。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.pursue.it.iconchange.MainActivity">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改图标"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

</android.support.constraint.ConstraintLayout>

在mainactivity中:

package com.pursue.it.iconchange;

import android.content.ComponentName;
import android.content.pm.PackageManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                changeIcon();
            }
        });
    }


//修改图标和名称的方法
    private void changeIcon() {
        PackageManager pm = getApplicationContext().getPackageManager();
        System.out.println(getComponentName());
       //去掉旧图标
        pm.setComponentEnabledSetting(getComponentName(),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
                PackageManager.DONT_KILL_APP);
        //显示新图标
        pm.setComponentEnabledSetting(new ComponentName(
                        getBaseContext(),
                        "com.pursue.it.iconchange.Test"),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                PackageManager.DONT_KILL_APP);
    }
}

点击按钮等待数秒,可以在手机桌面上看到图标和名称自动更换了。
实际开发中,应该是根据网络请求的结果来触发changeIcon()方法来更换图标。
demo地址:http://download.youkuaiyun.com/download/sushineboy/10145540

### 如何在 AndroidManifest.xml修改安卓应用名称图标 #### 应用名称修改 在 `AndroidManifest.xml` 文件中,可以通过 `<application>` 标签中的 `android:label` 属性来定义应用的显示名称。如果希望动态指定名称,则可以将其指向字符串资源文件中的某个键值[^1]。 以下是具体实现方式: ```xml <application ... android:label="@string/app_name" ...> </application> ``` 在此示例中,`@string/app_name` 是指代位于 `res/values/strings.xml` 文件中的一个字符串资源项。开发者可以在该文件中编辑实际的应用名称内容。 #### 图标修改 同样,在 `<application>` 标签下有一个名为 `android:icon` 的属性,用于设定应用启动器图标的路径。通常情况下,这个路径会指向 drawable 资源目录下的图像文件。 下面是一段示范代码展示如何设置图标: ```xml <application ... android:icon="@drawable/ic_launcher" ...> </application> ``` 这里,`ic_launcher` 就是你放置于不同分辨率 drawable 文件夹内的 PNG 或其他支持格式的图片文件名(不带扩展名)。为了适配多种屏幕密度,建议准备多尺寸版本并分别存入对应的 dpi 子目录下[^2]。 #### 完整实例 综合上述两点,完整的配置可能如下所示: ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" <!-- 设置应用图标 --> android:label="@string/app_name" <!-- 设置应用名称 --> android:supportsRtl="true"> <!-- 其他组件声明 --> </application> </manifest> ``` 注意:当更改这些值之后,需重新构建项目才能看到效果变化;另外,某些设备上缓存机制可能导致旧数据残留,必要时可尝试清除数据或者卸载重装应用查看。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值