安卓权威编程指南 挑战练习 22章 应用图标

农村四月闲人少,勤学苦攻把名扬。这篇文章主要讲述安卓权威编程指南 挑战练习 22章 应用图标相关的知识,希望能为你提供帮助。

本章使用了 ResolveInfo.loadLabel(...) 方法,在启动器应用中显示了各个activity的名 称。 ResolveInfo 类还提供了另一个名为 loadIcon() 的方法。可以使用该方法为每个应用加载 显示图标。你要接受的挑战就是,为NerdLauncher应用中显示的所有应用添加对应的图标。

  首先增加一个RecyclerView的条目布局,代码如下:
1 < ?xml version="1.0" encoding="utf-8"?> 2 < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3xmlns:tools="http://schemas.android.com/tools" 4android:orientation="horizontal" 5android:layout_width="match_parent" 6android:layout_height="wrap_content"> 7< TextView 8android:id="@+id/item_text" 9tools:text="asd" 10android:textSize="20sp" 11android:layout_gravity="center" 12android:layout_width="0dp" 13android:layout_height="wrap_content" 14android:layout_weight="2"/> 15 16< ImageView 17android:id="@+id/item_icon" 18android:layout_width="0dp" 19android:layout_height="wrap_content" 20android:layout_weight="1"/> 21 < /LinearLayout>

较之前只增加了一个ImageView用来显示App的Icon。
接下来直接修改NerdLauncherFragment中的ActivityHolder类和ActivityAdapter类就可以了。代码如下:
1 //用来显示activity标签名 2private class ActivityHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 3 4private ResolveInfo mResloveInfo; 5private TextView mNameTextView; 6private ImageView mIconImageView; 7 8public ActivityHolder(View itemView){ 9super(itemView); 10mNameTextView = (TextView)itemView.findViewById(R.id.item_text); 11mIconImageView = (ImageView)itemView.findViewById(R.id.item_icon); 12mNameTextView.setOnClickListener(this); 13mIconImageView.setOnClickListener(this); 14} 15 16public void bindActivity(ResolveInfo resloveInfo){ 17mResloveInfo = resloveInfo; 18PackageManager pm = getActivity().getPackageManager(); 19String appName =mResloveInfo.loadLabel(pm).toString(); 20Drawable appIcon = mResloveInfo.loadIcon(pm); 21mIconImageView.setImageDrawable(appIcon); 22mNameTextView.setText(appName); 23} 24 25@Override 26public void onClick(View v){ 27ActivityInfo activityInfo = mResloveInfo.activityInfo; 28/* 29*发送了ACTION_MAIN操作。发送的intent是否包含操作,对大多数app来说没什么区别。 30*不过,有些应用的启动行为可能会有所不同。取决于不同的启动要求,同样的activity可能会显示不同的用户界面。开发人员最好能明确启动意图,以便让activity完成它应该完成的任务。 31*/ 32Intent i = new Intent(Intent.ACTION_MAIN) 33.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 34.setClassName(activityInfo.applicationInfo.packageName,activityInfo.name); 35 36startActivity(i); 37} 38} 39 40private class ActivityAdapter extends RecyclerView.Adapter< ActivityHolder> { 41 42private final List< ResolveInfo> mActivities; 43 44public ActivityAdapter(List< ResolveInfo> activities){ 45mActivities = activities; 46} 47 48@Override 49public ActivityHolder onCreateViewHolder(ViewGroup parent, int viewType){ 50LayoutInflater layoutInflater = LayoutInflater.from(getActivity()); 51View view = layoutInflater.inflate(R.layout.nerd_launcher_item,parent,false); 52return new ActivityHolder(view); 53} 54 55@Override 56public void onBindViewHolder(ActivityHolder activityHolder, int position){ 57ResolveInfo resolveInfo = mActivities.get(position); 58activityHolder.bindActivity(resolveInfo); 59} 60 61@Override 62public int getItemCount(){ 63return mActivities.size(); 64} 65} 66 }

【安卓权威编程指南 挑战练习 22章 应用图标】 

    推荐阅读