آموزش تغییر متن و آیکون برنامه بعد از نصب و زمان اجرا در برنامه نویسی اندروید
یکی از کاربران عزیز سایت، بعد از چندزبانه کردن اپلیکیشن خود، به دنبال راهی بودند تا نام برنامه در لانچر نیز متناسب با زبان انتخاب شده تغییر یابد؛ ولی نام برنامه همیشه از همان 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 قرار دادهایم تا پس از نصب برنامه، فقط آیکون اکتیوتی اول نمایش داده شود.
از اینرو، زمانی که بخواهیم نام برنامه و یا آیکون برنامه تغییر یابد، بایستی از داخل برنامه، در زمانی که زبان دیگری انتخاب میشود، آیکون اکتیویتی مربوط به زبان فعلی را مخفی کرده و اکتیویتی مربوط به زبان انتخاب شده را ظاهر کنیم. همچنین، اکتیویتی دوم را از اکتیویتی اول مشتق کردهایم تا دیگر همان کدها را در اکتیویتی دوم نیز کپی نکنیم.
چنانچه راه حل دیگری در اختیار دارید، آن را از طریق قسمت نظرات برایمان ارسال کنید تا سایر دوستان نیز بهرهمند شوند.
سلام وقتتون بخیر و شادی
ممنون خیلی لطف کردید