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

转自:https://blog.csdn.net/zcdreaming/article/details/43415345

 一般情况下一个应用的安装包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.  
  7. <activity

  8. android:name="zc.app.phonelist.PhoneActivity"

  9. android:theme="@style/AppTheme"

  10. android:launchMode="singleInstance">

  11. </activity>

  12.  
  13. <activity-alias

  14. android:name="zc.app.phonelist.dail"

  15. android:label="@string/dial"

  16. android:icon="@drawable/ic_launcher"

  17. android:launchMode="singleInstance"

  18. android:targetActivity="zc.app.phonelist.PhoneActivity">

  19. <intent-filter>

  20. <action android:name="android.intent.action.MAIN"/>

  21. <category android:name="android.intent.category.LAUNCHER"/>

  22. </intent-filter>

  23. </activity-alias>

  24.  
  25. <activity-alias

  26. android:name="zc.app.phonelist.contacts"

  27. android:label="@string/contacts"

  28. android:icon="@drawable/ic_launcher"

  29. android:launchMode="singleInstance"

  30. android:targetActivity="zc.app.phonelist.PhoneActivity">

  31. <intent-filter>

  32. <action android:name="android.intent.action.MAIN"/>

  33. <category android:name="android.intent.category.LAUNCHER"/>

  34. </intent-filter>

  35. </activity-alias>

  36. </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.  
  3. @Override

  4. protected void onCreate(Bundle savedInstanceState) {

  5. super.onCreate(savedInstanceState);

  6. setContentView(R.layout.activity_main);

  7. TextView tv = (TextView)findViewById(android.R.id.text1);

  8. ActivityInfo activityinfo = null;

  9. try {

  10. activityinfo = getPackageManager().getActivityInfo(getComponentName(), PackageManager.GET_META_DATA);

  11. } catch (NameNotFoundException e) {

  12. e.printStackTrace();

  13. }

  14. if(activityinfo.name.equals("zc.app.phonelist.dail"))

  15. tv.setText(getResources().getString(R.string.dial));

  16. if(activityinfo.name.equals("zc.app.phonelist.contacts"))

  17. tv.setText(getResources().getString(R.string.contacts));

  18. }

  19. }</span>

 

这里有几点需要注意:

1.activity-alias中添加的intent-filter为了被系统过滤出来(这里是为了显示两个图标的效果),也可以设置其他过滤器;

2.必须设置android:launchMode="singleInstance"属性。否则从拨号进入应用后,按Home键,再从联系人进入时会出现拨号的界面;

3. activity-alias中android:targetActivity指定的Activity的标签必须放在activity-alias之前。否则运行时会报错找不到name所指定的activity。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值