探讨android 导航栏中的recent_app界面

有空研究一下android 导航栏中的recent_app。

 

从资源文件下手,找到位于 frameworks\base\tools\layoutlib\bridge\src\com\android\layoutlib\bridge\bars的NavigationBar.java文件,这是一个linearlayout的子类,setBackgroundColor(0xFF000000);这个设置导航栏背景为黑色。

loadIcon就是导入图片的地方,根据linearlayout方向来确定back和recent 的位置。

loadicon定义在frameworks\base\tools\layoutlib\bridge\src\com\android\layoutlib\bridge\bars的CustomBar.java通过

Bridge.setCachedBitmap 或者imageView.setImageDrawable(drawable)来导入图片资源。

 

具体的点击事件在(frameworks\base\packages\systemui\src\com\android\systemui\recent) 的RecentsPanelView.java文件中。一个TaskDescriptionAdapter来匹配view。

TaskDescriptionAdapter中有 getcount,getItem,getItemID,createView,getView方法。

点击一个item的动作handleOnClick(View view)中处理

if (ad.taskId >= 0) {
            // This is an active task; it should just go to the foreground.
            am.moveTaskToFront(ad.taskId, ActivityManager.MOVE_TASK_WITH_HOME,
                    opts);

点击其中一项,就打开相应的activity。

 

长按item动作会弹出个删除和一个详细信息在handleLongPress(,,)方法中;

popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            public boolean onMenuItemClick(MenuItem item) {
                if (item.getItemId() == R.id.recent_remove_item) {
                    mRecentsContainer.removeViewInLayout(selectedView);
                } else if (item.getItemId() == R.id.recent_inspect_item) {
                    ViewHolder viewHolder = (ViewHolder) selectedView.getTag();
                    if (viewHolder != null) {
                        final TaskDescription ad = viewHolder.taskDescription;
                        startApplicationDetailsActivity(ad.packageName);
                        show(false);
                    } else {
                        throw new IllegalStateException("Oops, no tag on view " + selectedView);
                    }
                } else {
                    return false;
                }
                return true;
            }
        });
        popup.setOnDismissListener(new PopupMenu.OnDismissListener() {
            public void onDismiss(PopupMenu menu) {
                thumbnailView.setSelected(false);
                mPopup = null;
            }
        });
        popup.show();

 

这个界面其实一个activity。代码在RecentsActivity.java 中,如果要修改他的布局,修改onCreate()函数的setContentView(R.layout.status_bar_recent_panel)的布局文件。

RecentsActivity.java这个函数就是整个recent界面的相关的类。而RecentsPanelView.java就是单个项相关的类。

你可能感兴趣的:(android,recent_app)