题记
工作需要,最近对拨号模块进行研究,下文主要介绍Android6.0下拨号应用主界面。
Dialer代码目录
Dialer上层代码主要有以下部分组成:
/packages/apps/Dialer/ –拨号应用主入口
/packages/apps/ContactsCommon –与Contacts共用的代码
/packages/apps/PhoneCommon
/packages/apps/InCallUI –通话界面
Dialer主界面
下面我们就对Dialer主界面进行分析,界面如下图:
由Dialer应用的AndroidManifest文件得知,Dialer的主activity为DialtactsActivity:
android:label="@string/launcherActivityLabel"
android:theme="@style/DialtactsActivityTheme"
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:icon="@mipmap/ic_launcher_phone"
android:windowSoftInputMode="stateAlwaysHidden|adjustNothing"
android:screenOrientation="portrait">
... ...
那么我们就开始分析DialtactsActivity.java;
首先查看onCreate函数,该函数对界面完成初始化:
1. 主界面布局
setContentView(R.layout.dialtacts_activity);
初始化actionBar 主界面最上方
onCreate中代码如下,该处只列出初始化过程,不对actionbar的功能进行叙述。
//获取ActionBar
final ActionBar actionBar = getActionBar();
//设置ActionBar的布局
actionBar.setCustomView(R.layout.search_edittext);
actionBar.setDisplayShowCustomEnabled(true);
actionBar.setBackgroundDrawable(null);
加载视图
由于dialtacts_activity.xml中只是空布局,onCreate中进行布局的加载,添加相应的fragment;
getFragmentManager().beginTransaction()
.add(R.id.dialtacts_frame, new ListsFragment(), TAG_FAVORITES_FRAGMENT)
.add(R.id.dialtacts_container, new DialpadFragment(), TAG_DIALPAD_FRAGMENT)
.commit();
此时onCreate就完成了,布局的加载;乍一看然而并没有对下面的ViewPagerTabs和mViewPager(也就是拨号的快速拨号、通话记录、联系人页面)进行初始化。
仔细跟踪代码,可以发现这些界面是在ListsFragment()中进行初始化的,下面来进行介绍。
(快速拨号、通话记录、联系人页面)主要布局初始化
下面主要分析ListFragment(/DialtactsActivity/src/com/android/dialer/list/ListsFragment.java);
Fragment的学习可参照我之前的一篇博客:
整体fragment的布局:
final View parentView = inflater.inflate(R.layout.lists_fragment, container, false);
布局文件内容如下:
此处的com.android.contacts.common.list.ViewPagerTabs即为图中ViewPagerTabs;android.support.v4.view.ViewPager为图中的mViewPager;
通过ViewPagerTabs、ViewPager、ViewPagerAdapter三者之间的交互完成主要布局的初始化;代码如下,下章进行介绍分析三者之间的交互;
ViewPager、Adapter、fragment的使用,可参照如下帖子进行学习,非常的详细:
主要涉及代码目录:
/DialtactsActivity/src/com/android/dialer/list/ListsFragment.java
/ContactsCommon/src/com/android/contacts/common/list/ViewPagerTabs.java
后记
一步一个坑。