有空研究一下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就是单个项相关的类。

更多相关文章

  1. C语言函数以及函数的使用
  2. 后台动态添加布局文件、控件与动态设置属性
  3. Android 百分比布局
  4. Android浏览器如何打开本地html文件
  5. Android 支持的 media 文件格式--MediaFile
  6. android 导出签名APK--混淆文件proguard.cfg详解
  7. Android 在xml布局配置文件中给Button按钮添加事件

随机推荐

  1. Android禁止锁屏
  2. Android中listview中的button
  3. Android样式的开发:Style篇
  4. android EditText设置不可写
  5. android 在线API
  6. android开发架构设计学习
  7. android版本对应表
  8. 新年过后献上关于Android内存泄漏的种种
  9. Android通讯:通话
  10. 基于Socket的Android手机视频实时传输