Android开发为应用设置多个icon图标

时间:2024-10-08 09:52:27

 一般情况下一个应用的安装包apk在安装后,会出现一个应用程序图标icon,它就是应用程序入口。但是有些应用程序apk安装后会出现多个icon,并且每个icon进入同一个应用程序,比较典型的应用就是联系人和拨号程序。结合自Android 3.0后引入的组件Fragment配合使用,分别点击联系人图标和拨号图标进入应用程序显示联系人和拨号的界面。下面的例子是实现这种功能比较简单又好理解的方式:

  1. <span style="font-family:Times New Roman;"><application
  2. android:allowBackup="true"
  3. android:icon="@drawable/ic_launcher"
  4. android:label="@string/app_name"
  5. android:theme="@style/AppTheme" >
  6. <activity
  7. android:name=""
  8. android:theme="@style/AppTheme"
  9. android:launchMode="singleInstance">
  10. </activity>
  11. <activity-alias
  12. android:name=""
  13. android:label="@string/dial"
  14. android:icon="@drawable/ic_launcher"
  15. android:launchMode="singleInstance"
  16. android:targetActivity="">
  17. <intent-filter>
  18. <action android:name=""/>
  19. <category android:name=""/>
  20. </intent-filter>
  21. </activity-alias>
  22. <activity-alias
  23. android:name=""
  24. android:label="@string/contacts"
  25. android:icon="@drawable/ic_launcher"
  26. android:launchMode="singleInstance"
  27. android:targetActivity="">
  28. <intent-filter>
  29. <action android:name=""/>
  30. <category android:name=""/>
  31. </intent-filter>
  32. </activity-alias>
  33. </application></span>
在例子中,仅实现一个界面PhoneActivity。activity-alias标签可以理解为属性android:targetActivity指定的Activity的别名,共享PhoneActivity,activity-alias标签除了android:targetActivity属性都是activity的属性的子集,同样可以设置intent-filter。按上述方法设置后安装应用程序会出现如图所示拨号和联系人两个图标。




点击任何一个图标,都会启动PhoneActivity。例如,在点击进入时进行activity信息的判断,若入口为拨号,则显示拨号界面,若入口为联系人则显示联系人界面。PhoneActivity如下:

  1. <span style="font-family:Times New Roman;font-size:18px;">public class PhoneActivity extends Activity{
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(.activity_main);
  6. TextView tv = (TextView)findViewById(.text1);
  7. ActivityInfo activityinfo = null;
  8. try {
  9. activityinfo = getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);
  10. } catch (NameNotFoundException e) {
  11. ();
  12. }
  13. if((""))
  14. (getResources().getString());
  15. if((""))
  16. (getResources().getString());
  17. }
  18. }</span>


这里有几点需要注意:
-alias中添加的intent-filter为了被系统过滤出来(这里是为了显示两个图标的效果),也可以设置其他过滤器;
2.必须设置android:launchMode="singleInstance"属性。否则从拨号进入应用后,按Home键,再从联系人进入时会出现拨号的界面;
3. activity-alias中android:targetActivity指定的Activity的标签必须放在activity-alias之前。否则运行时会报错找不到name所指定的activity。