contact 结果显示

7.结果显示

   问题:1,加载联系人时,联系人前面有 A,B,C等等,查询时的结果都没有

       2,联系人前面ABC的大写字母颜色不一样

       3,加载联系人仅显示姓名,Dialer查询时还会显示号码,Contacts查询时,

       如果邮箱和号码匹配,才显示,否则仅仅显示姓名。什么,邮箱也可以查询?

7.1联系人前面的ABC字符
字符查询流程

ContactsProvider2查询时,将字符查询后通过

FastScrollingIndexCache写入到Bundle中,然后将该Bundle塞入Cursor中。

流程如下:


以下是buildExtraBundle函数, 和下面在Bundle中取出一目了然。

public static final Bundle buildExtraBundle(String[] titles, int[] counts) {
Bundle bundle = new Bundle();
bundle.putStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES, titles);
bundle.putIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS,counts);
return bundle; }

该数据在数据更新的时候(增加/删除/修改/查询)都会调用,所以可以实时显示。

字符查询后写入流程

ContactEntryListFragment.java中的onLoadFinished将查询到的ABC字符信息写入到ContactsSectionIndexer类中的流程如下:


在updateIndexer函数中,

String  sections[]=   

    bundle.getStringArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_TITLES);

int counts[]= bundle.getIntArray(Contacts.EXTRA_ADDRESS_BOOK_INDEX_COUNTS);

sections 字符数组中存储的自然是 ABCDEF等等

counts  数组存储对应的字符的联系人的个数。

ContactsSectionIndexer中三个实例,

privateString[] mSections; // ABCD等字符串数组

private int[]mPositions;// 是counts对应位置元素的累加。

  表示的是在哪些联系人前面显示对应的字符,比如在55到87位置显示 F

  // 在后面的显示中会用到这个转换,这个算法还是有点小复杂

private intmCount;// 所有联系人的个数

疑惑6:这两个数组应该在查询联系人时就设置进去了,但是在哪儿设置进去的呢

Android 5.0 汉字不能识别,前面显示 #

Android 6.0 可以识别汉字,比如,伯伯 前面显示 B

字符显示流程

加载联系人时,虽然DefaultContactListAdapter和PhoneNumberListAdapter都调用bindSectionHeaderAndDivider函数,但是有同一个判断条件

isSectionHeaderDisplayEnabled,在加载联系人时,该值为true,在查询联系人时,该值为false,所以该字符在加载和查询时的显示有区别。


在getItemPlacementInSection函数中,进行相关算法,如果联系人所在位置是第一个就显示的字符就显示,否则就显示空字符。

7.2联系人图标显示

PhoneNumberListAdapter里面的bindView函数调用的是bindQuickContact

(QuickContactBadge),DefaultContactListAdapter调用了bindPhoto(ImageView)函数,但是其他流程一模一样。在各自对应的Fragement里面调用setQuickContactEnabled来设置。在这里仅描述DefaultContactListAdapter的流程。

bindPhoto函数中,首先判断该联系人是否有自带的图像,如果有就调用

loadThumbnail函数将图像加载并显示为原型的图标;如果没有图像,就调用

loadDirectoryPhoto函数设置默认图标。这里面两个类比较重要,

DefaultImageRequest和LetterTileDrawable。DefaultImageRequest的实例

displayName(联系人的名字), identifier(联系人的唯一标识符),并且通过

setContactDetails传送到LetterTileDrawable类中。

ImageView类的onDraw函数里面会调用Drawable(LetterTileDrawable)的draw函数。在drawLetterTile( )中完成图标以及字符的显示,首先设置颜色,一共有14中颜色,定义在ContactsCommon/res/values/colors.xml  / letter_tile_colors

得到颜色的方法: final int color = Math.abs(identifier.hashCode())% sColors.length().

然后根据mDisplayName来判断第一个字符是否为英语字母,如果不是,则显示默认的图标,否则将字符转化为大写字母后显示在图标上。

7.3联系人相关信息显示

这是contacts查询联系人时的序列图.在DefaultContactListAdapter的bindView函数中,

bindNameAndViewId(view,cursor); // 显示姓名
bindPresenceAndStatusMessage(view,cursor);// 显示联系人后面的拨号图标
if(isSearchMode()) {
     bindSearchSnippet(view, cursor);// 处于查询状态时,显示号码或者其他
} else {
     view.setSnippet(null);//处于没有查询的状态,不显示号码或者其他
     }
bindPresenceAndStatusMessage,只有contact才显示联系人后面的图标。

显示总结

MultiSelectContactsListFragment以及AllContactsFragment通过

DefaultContactListAdapter调用bindView来显示。

疑惑:为啥AllContactsFragment联系人没有后面的拨号图标?

SmartDialSearchFragment和RegularSearchFragment通过

PhoneNumberListAdapter调用bindView来显示。在该bindView函数中,

bindName(view,cursor); // 显示姓名

bindPhoneNumber(view,cursor, directory.isDisplayNumber());// 显示电话号码

bindQuickContact() // 显示联系人前面的图标。

搜索时,显示结果匹配的地方加了渲染,通过SpannableString和TextHighlighter来完成。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ossila contact angle软件是一款用于测量材料接触角的工具。这款软件可以帮助我们更准确地分析材料的表面特性和润湿性。下载并使用Ossila contact angle软件,能够帮助我们快速计算接触角,并提供一系列可视化的结果。 Ossila contact angle软件的下载方式比较简单。我们可以通过Ossila官方网站或其他合法的软件下载网站进行下载。在搜索框中输入“Ossila contact angle软件”即可找到相关的下载链接。 下载之前,我们需要确保计算机系统满足软件的最低要求。一般来说,我们需要一台运行Windows或Mac操作系统的计算机,具有足够的处理能力和内存容量。此外,还需要具备稳定的网络连接来保证软件的正常下载。 下载完成后,我们可以按照软件安装包的指引,将软件成功安装到计算机中。安装过程相对简单,只需双击运行安装包,然后按照提示进行安装。 安装完成后,我们可以打开软件,并按照软件的用户指南进行操作。通过图片或视频或任何导入的图像文件,我们可以选择感兴趣的材料进行接触角测量。软件将根据图片中的液滴形状和大小,自动计算出接触角。 最后,软件会生成一份报告,显示所有测量结果,包括接触角、液滴大小等关键参数。我们可以用这些结果来分析材料的润湿性和表面特性,为进一步研究和应用提供参考。 总的来说,Ossila contact angle软件是一款方便易用且功能强大的工具。它可以帮助我们准确测量材料的接触角,并提供详细的结果与报告。通过下载和使用这款软件,我们可以更加深入地研究材料的表面性质,并且在材料科学研究和工程应用中发挥重要作用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值