تغییر متن و آیکون برنامه بعد از نصب و زمان اجرا در برنامه نویسی اندروید

تغییر متن و آیکون برنامه بعد از نصب و زمان اجرا در برنامه نویسی اندروید

آموزش تغییر متن و آیکون برنامه بعد از نصب و زمان اجرا در برنامه نویسی اندروید


یکی از کاربران عزیز سایت، بعد از چندزبانه کردن اپلیکیشن خود، به دنبال راهی بودند تا نام برنامه در لانچر نیز متناسب با زبان انتخاب شده تغییر یابد؛ ولی نام برنامه همیشه از همان strings.xml پیش‌فرض گرفته می‌شود.
حالا تصمیم گرفتم تا در این پست، راه حلی برای تغییر نام و آیکون برنامه در زمان اجرای برنامه قرار دهم.

پیش‌نیازهای این پست:

با مطالعه‌ی پیش‌نیازها و البته دو مورد آخر، یحتمل روش قرار گرفته در این پست را حدس بزنید.

مراحل انجام کار

فرض کنید، دو دکمه در Layout مربوط به اکتیویتی قرار داده‌ایم و می‌خواهیم زمانی که روی هرکدام کلیک شد، یک آیکون و نام دیگری برای برنامه در لانچر قرار بگیرد.

اکتیویتی خود را به صورت زیر تکمیل کنید:

package com.fullkade.test;

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

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                enable(MainActivity.class, true);
                enable(MainActivity2.class, false);
            }
        });

        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                enable(MainActivity2.class, true);
                enable(MainActivity.class, false);
            }
        });
    }

    public void enable(Class<?> activity, boolean enable) {
        getPackageManager().setComponentEnabledSetting(new ComponentName(this, activity), enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
    }

}

یک کلاس جدید با نام دلخواه مثلا MainActivity2 ایجاد کرده و آن را از کلاس بالا مشتق کنید:

package com.fullkade.test;

public class MainActivity2 extends MainActivity {
}

منیفست خود را نیز به صورت زیر کامل کنید:

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

    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name_1"
        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" />

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

        <activity
            android:name=".MainActivity2"
            android:enabled="false"
            android:icon="@mipmap/ic_launcher_2"
            android:label="@string/app_name_2">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

توضیحات

برنامه به این صورت کار می‌کند که ما دو اکتیویتی در Manifest تعریف کرده و برای هرکدام از این دو، یک label و icon جدا تنظیم کرده‌ایم.
اگر پیش‌نیازها را مطالعه کرده‌باشید:

  • اکشن و category مورد نیاز را برای اکتیویتی دوم نیز تعریف کرده‌ایم که بتواند در لانچر دیده شود.
  • ولی ویژگی enable اکتیویتی دوم را به صورت پیش‌فرض false قرار داده‌ایم تا پس از نصب برنامه، فقط آیکون اکتیوتی اول نمایش داده شود.

از این‌رو، زمانی که بخواهیم نام برنامه و یا آیکون برنامه تغییر یابد، بایستی از داخل برنامه، در زمانی که زبان دیگری انتخاب می‌شود، آیکون اکتیویتی مربوط به زبان فعلی را مخفی کرده و اکتیویتی مربوط به زبان انتخاب شده را ظاهر کنیم. هم‌چنین، اکتیویتی دوم را از اکتیویتی اول مشتق کرده‌ایم تا دیگر همان کدها را در اکتیویتی دوم نیز کپی نکنیم.

همانطور که در پیش‌نیازها گفته شد، چند ثانیه طول می‌کشد تا آیکون مخفی شده و ظاهر شود. پس نگران این مورد نباشید.


چنانچه راه حل دیگری در اختیار دارید، آن را از طریق قسمت نظرات برایمان ارسال کنید تا سایر دوستان نیز بهره‌مند شوند.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده ۱ دیدگاه

    1. حمزه کاربر مهمان گفت:

      سلام وقتتون بخیر و شادی

      ممنون خیلی لطف کردید

      10
توضیحات پیشنهادی نظرات اشتراک