簡體   English   中英

Android:以編程方式更改應用標簽

[英]Android : Change App Label programmatically

如何更改應用程序標簽以更改從 android 中的 java 代碼顯示的應用程序名稱? 我指的是:

<application android:icon="@drawable/icon" android:label="@string/app_name">

在 Android 清單中

有什么方法可以更新strings.xml文件中的值嗎?

在活動中,我嘗試了

this.setTitle("your text");

而且有效。 我希望這是一個常見的解決方案

目前尚不可能。 它是AndroidManifest.xml文件中的固定字符串,無法在運行時更改。

使用<activity-alias>可以將應用程序圖標和名稱更改為您自己預定義的名稱。

Mannifest.xml創建這樣的配置

<activity android:name="package.name.MainActivity"
 android:screenOrientation="portrait"
 android:label="@string/app_name"
 android:theme="@style/CustomTheme"
 android:launchMode="singleTask">
  <intent-filter>
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

<activity-alias android:label="@string/app_name_default" 
 android:icon="@drawable/icon_default" 
 android:name=".MainActivity-Default"
 android:enabled="true"
 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:label="@string/app_name_flavor_one" 
 android:icon="@drawable/icon_flavor_one" 
 android:name=".MainActivity-Flavor-One"
 android:enabled="false"
 android:targetActivity=".MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>   
</activity-alias>

現在您可以在這兩個別名之間切換,因此我們將更改應用程序圖標或/和名稱。 要將默認值切換為Flavor-One,請使用此代碼。

 getPackageManager().setComponentEnabledSetting(
    new ComponentName("package.name", "package.name.MainActivity-Flavor-One"), 
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
 getPackageManager().setComponentEnabledSetting(
    new ComponentName("package.name", "package.name.MainActivity-Default"), 
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);

請記住,您必須跟蹤一次僅啟用一個別名

在啟動器活動中,在setContentView()之前編寫此代碼,

setTitle("Your Title");

我不知道這是怎么可能的,但是肯定可以。

應用程序的android:label是固定資源引薦來源網址。

但是,根據提供替代資源的說法,此引薦來源網址下的字符串可以具有多個值,具體取決於配置限定符名稱(values-en,-large,-land等)。

如果要擴展固件,則實際上可以通過更改IconCache.java文件並使其顯示帶有電話某些內部值的字符串來實現。

例如,如果您想讓SIM Toolkit顯示運營商的名稱,則可以通過這種方式進行。

但是對於常規應用程序,正如之前所說,目前尚不可行。

正如史密斯先生所說,這是不可能的,

但是您可以使用多個ActivityAlias ,它們可以動態啟用/禁用並指向相同的targetActivity。 因此,為您的應用名稱創建選擇器-讓用戶選擇一個並通過packageManager啟用ActivityAlias

ComponentName componentName = new ComponentName(context, context.getPackageName() + "." + aliasName);
        context.getPackageManager().setComponentEnabledSetting(componentName,
                                                               PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                                                               PackageManager.DONT_KILL_APP);

要隱藏舊別名,請使用帶有標志的相同代碼: COMPONENT_ENABLED_STATE_DISABLED

在啟用別名之后,您還可以添加直接向家庭啟動器添加快捷方式的可能性。 母豬這里描述了很多方法。

是的,有可能,在這個問題中,每個人都提到過

this.setTitle("your text");

這只會更改您的活動名稱而不是應用程序徽標在這里我將向您展示如何動態更改應用程序徽標和應用程序名稱

首先在 mipmap 文件夾中添加您的動態應用程序圖標,然后在您的AndroidManifest.xml文件中添加以下代碼

為您的應用圖標添加<activity-alias>

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <!-- Disable the original activity app icon in launcher -->
                <!-- <category android:name="android.intent.category.LAUNCHER" /> -->
            </intent-filter>
        </activity>


        <activity-alias android:label="Anand"
            android:icon="@mipmap/ic_launcher"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:name=".MainActivityAlias1"
            android:enabled="true"
            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:label="Anand 1"
            android:icon="@mipmap/ic_launcher2"
            android:roundIcon="@mipmap/ic_launcher2_round"
            android:name=".MainActivityAlias2"
            android:enabled="false"
            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity-alias>

    </application>

在您的活動上執行這些方法后,只需在按鈕單擊時執行以下操作

import android.content.ComponentName
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        button1.setOnClickListener{
            packageManager?.setComponentEnabledSetting(
                    ComponentName(applicationContext.packageName, applicationContext.packageName + ".MainActivityAlias1"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP
            )

            packageManager?.setComponentEnabledSetting(
                    ComponentName(applicationContext.packageName, applicationContext.packageName + ".MainActivityAlias2"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP
            )
        }

        button2.setOnClickListener{
            packageManager?.setComponentEnabledSetting(
                    ComponentName(applicationContext.packageName, applicationContext.packageName + ".MainActivityAlias1"),
                    PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP
            )

            packageManager?.setComponentEnabledSetting(
                    ComponentName(applicationContext.packageName, applicationContext.packageName + ".MainActivityAlias2"),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP
            )
        }
    }
}

有關更多詳細信息,請參閱此github項目

對任何有興趣的人: Android如何更改應用程序標題,但尚不清楚是更改“應用程序標簽”(即,應用程序列表中圖標的名稱)還是僅更改窗口標題。

暫無
暫無

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

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