android 4.0联系人界面代码一起分析下

来源:互联网 发布:eve ios软件 编辑:程序博客网 时间:2024/06/05 03:22

有大神研究过android的联系人界面吗?公司有关于这方面的要求所以有大神请知道啊!
今天研究了一下先说说新增界面的
通过ActivityManager的跳转log,我们很容易找到跳转到的页面是ContactEditorActivity。

在onCreate方法中,看到setContentView(R.layout.contact_editor_activity),您可能会想到,这和我刚说的好像不一样啊,这不是就通过setContentView方法设置界面的嘛,请跟我继续看。contact_editor_activity.xml中只有ScrollView和一个fragment两个组件,看样子应该在fragment中。进入ContactEditorFragment,找到该类的onCreateView方法,首先引起我们注意的肯定是final View view = inflater.inflate(R.layout.contact_editor_fragment, container, false),顺藤摸瓜,我们看看contact_editor_fragment.xml是否有什么神秘的地方?布局很简单,外面一个FrameLayout,包裹这一个ScrollView和一个id叫做editors的LinearLayout,看样子,应该是动态绑定的,看代码,在onCreateView的第二行,见到了如下的语句,  mContent = (LinearLayout) view.findViewById(R.id.editors),啥也不用说,继续,哈哈,在onCreate方法中,我们看到了bindEditors()的身影。下面我们来看看是否有什么收获,引起我注意的就是mContent对象(对应于布局中的线性布局editors),在该方法中第一个注意点是mContent.removeAllViews(),也就是将线性布局中的对象全部移除,看样子接下来就是动态绑定了,接下来,看到下面的1句,final LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE),就更加坚定了我的想法,好,再往下就跟账户类型又关了,在往下,见到曙光了

final BaseRawContactEditorView editor;

if (!type.areContactsWritable()) {

       editor = (BaseRawContactEditorView) inflater.inflate(

                  R.layout.raw_contact_readonly_editor_view, mContent, false);

      ((RawContactReadOnlyEditorView) editor).setListener(this);

 } else {

       editor=(RawContactEditorView) inflater.inflate(R.layout.raw_contact_editor_view,

                        mContent, false);

 }

看样子是根据账户的类型,是否可以,然后加载不同的布局,通过log会发现,正常的情况下,添加联系人的情况type.areContactsWritable()都是true,也就是加载else语句所示的文件,我们先看看该文件,首先跟标签是com.android.contacts.editor.RawContactEditorView一个自定义的线性布局
但是我又看了联系人界面的peopleactivity的找到了
  private void createViewsAndFragments(Bundle savedState) {
        setContentView(R.layout.people_activity);

但是跟着找下次 我就疯了 糊涂了 下下午都没看明白啊 
求有研究过的 一起分析一下