欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android app本地切换logo和名称

程序员文章站 2021-12-03 08:59:10
首先呢,在app的androidmanifest.xml文件里,配置需要替换的logo和app名称eg:下面配置了一套默认的,两套用于切换的icon和名称android:enabled: 设为&ldq...

首先呢,在app的androidmanifest.xml文件里,配置需要替换的logo和app名称
eg:下面配置了一套默认的,两套用于切换的icon和名称
android:enabled: 设为“true”时,就会启用当前别名的activity,和当前的icon和当前的应用名称: 设为“false”时,表示停止使用当前别名的activity
android:icon:当前别名的应用图标
android:label:当前别名的应用名称
android:name:别名,命名规则同actively
android:targetactivity:通过别名调用的实际 activity 的名称

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.cgg.change_icon">

    <application
        android:allowbackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsrtl="true"
        android:theme="@style/theme.changeicon">

        <activity android:name=".mainactivity"/>

        <activity-alias
            android:name=".defaultaliasactivity"
            android:enabled="true"
            android:icon="@mipmap/ic_launcher"
            android:label="changeicon"
            android:targetactivity=".mainactivity">
            <intent-filter>
                <action android:name="android.intent.action.main" />
                <category android:name="android.intent.category.launcher" />
            </intent-filter>
        </activity-alias>

        <activity-alias
            android:name=".alias1activity"
            android:enabled="false"
            android:icon="@mipmap/app_logo_b"
            android:label="changeicon1"
            android:targetactivity=".mainactivity">
            <intent-filter>
                <action android:name="android.intent.action.main" />
                <category android:name="android.intent.category.launcher" />
            </intent-filter>
        </activity-alias>

        <activity-alias
            android:name=".alias2activity"
            android:enabled="false"
            android:icon="@mipmap/app_logo_c"
            android:label="changeicon2"
            android:targetactivity=".mainactivity">
            <intent-filter>
                <action android:name="android.intent.action.main" />
                <category android:name="android.intent.category.launcher" />
            </intent-filter>
        </activity-alias>
    </application>

</manifest> 

然后就是代码切换:相关方法介绍一下
通过 packagemanager 在清单文件中所定义的任何组件上切换 启用/停止 状态。
packagemanager.setcomponentenabledsetting
设置包组件(活动、接收器、服务、提供程序)的启用设置。此设置将覆盖组件在其清单中设置的任何启用状态。
参数:
componentname–要启用的组件
newstate–组件的新启用状态。
flags–可选的行为标志

package com.cgg.change_icon

import android.content.componentname
import android.content.context
import android.content.pm.packagemanager
import androidx.appcompat.app.appcompatactivity
import android.os.bundle
import android.widget.button
import android.widget.imageview
import android.widget.radiogroup
import androidx.annotation.stringdef

class mainactivity : appcompatactivity() {

    val app_d = "com.cgg.change_icon.defaultaliasactivity"
    val app_1 = "com.cgg.change_icon.alias1activity"
    val app_2 = "com.cgg.change_icon.alias2activity"

    private var mpackagemanager: packagemanager? = null

    override fun oncreate(savedinstancestate: bundle?) {
        super.oncreate(savedinstancestate)
        setcontentview(r.layout.activity_main)

        mpackagemanager = applicationcontext.packagemanager

        findviewbyid<imageview>(r.id.iv_0).setonclicklistener {
            showcomponent(app_d)
        }

        findviewbyid<imageview>(r.id.iv_1).setonclicklistener {
            showcomponent(app_1)
        }

        findviewbyid<imageview>(r.id.iv_2).setonclicklistener {
            showcomponent(app_2)
        }

    }

    private fun showcomponent(app: string){
        packagemanager.run {
            setcomponentenabledsetting(
                componentname,
                packagemanager.component_enabled_state_disabled,
                packagemanager.dont_kill_app
            )
            setcomponentenabledsetting(
                componentname(basecontext, app),
                packagemanager.component_enabled_state_enabled,
                packagemanager.dont_kill_app
            )
        }
    }

}

布局也贴一下

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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=".mainactivity">

    <imageview
        android:id="@+id/iv_0"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:scaletype="centercrop"
        android:src="@mipmap/ic_launcher"
        app:layout_constraintleft_toleftof="parent"
        app:layout_constraintright_torightof="parent"
        app:layout_constrainttop_totopof="parent"
        android:layout_margintop="30dp"/>

    <imageview
        android:id="@+id/iv_1"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:scaletype="centercrop"
        android:src="@mipmap/app_logo_b"
        app:layout_constraintleft_toleftof="parent"
        app:layout_constraintright_torightof="parent"
        app:layout_constrainttop_tobottomof="@id/iv_0"
        android:layout_margintop="30dp"/>

    <imageview
        android:id="@+id/iv_2"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:scaletype="centercrop"
        android:src="@mipmap/app_logo_c"
        app:layout_constraintleft_toleftof="parent"
        app:layout_constraintright_torightof="parent"
        app:layout_constrainttop_tobottomof="@id/iv_1"
        android:layout_margintop="30dp"/>

</androidx.constraintlayout.widget.constraintlayout>

功能说完了,下面说下缺陷

替换的icon需要打包的时候就预埋到代码里icon切换的时候和闪退一样上过含activity-alias包后,如果再更新不含activity-alias包,会导致 app 从桌面再也找不到的风险

到此这篇关于android app本地切换logo和名称的文章就介绍到这了,更多相关android 切换logo和名称内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!