http://www.cnblogs.com/Lefter/p/3804255.html

如何让联系人头像显示联系人姓名的第一个汉字

在android 4.4.3上面,联系人的头像默认显示首字母,但是不支持中文字符,如下图:

如果联系人名字的第一位是英文字符(a-z || A-Z),则默认头像将显示该首字母。

如果支持中文时显示第一个汉字,那就happy了。

那就看看如何通过修改源代码来实现这一小功能吧~

我们还是先了解下联系人头像加载的流程吧~

联系人头像加载这个问题还是很有意思的,在Contacts中使用ContactPhotoManager类(严格来讲是这个类的子类)来实现头像的异步加载。

这个类还使用了LruCache来缓存图片,相当的强大,对图像的异步加载和缓存有兴趣的同志们可以看看。

以主页面的联系人列表加载头像为例。大致的调用流程为(只针对没有设置头像的联系人,即photoUri是null):

DefaultContactListAdapter->bindView()
  ContactEntryListAdapter->buildQuickContact()
    ContactEntryListAdapter->getDefaultImageRequestFromCursor()
      ContactPhotoManagerImpl->loadPhoto()->provider:LetterTileDefaultImageProvider // 注意,使用的是DEFAULT_AVATAR对象
        LetterTileDefaultImageProvider->applyDefaultImage()
          LetterTileDefaultImageProvider->getDefaultImageForContact()
            LetterTileDrawable->drawLetterTile()->firsr char:高

在drawLetterTile函数执行drawText之前会调用isEnglishLetter来判断字符串的首字符是否为英文字符,如果是,则将首字母画上去;

否则,使用默认头像

    private static boolean isEnglishLetter(final char c) {return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z');}

通过上面的流程解析,我们可以确定,是isEnglishLetter函数导致在中文字符不被描画。

嗯,那我们就改造一下这个函数吧。不废话,直接上代码~

    private static boolean isEnglishLetter(final char c) {return ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || isChineseLetter(c);}

    private static boolean isChineseLetter(final char c) {return isChinese(String.valueOf(c));}

至于isChinese函数的实现,代码就不贴了,有兴趣的可以参考我的一篇判断字符为中文、日文、韩文的文章(http://www.cnblogs.com/Lefter/p/3804051.html)

经过这个改造后,我们就可以让默认头像显示中文名字的第一个汉字了!

分类:Android

如何让联系人头像显示联系人姓名的第一个汉字相关推荐

  1. 横屏模式下,编辑手机联系人添加图片,保存后联系人头像与之前默认的图片重叠或者是有阴影在头像上

    测试步骤: 横屏模式下,编辑手机联系人添加图片,保存后联系人头像显示模糊不清晰.退出该联系人界面,再次进入的时候显示清晰,后续在横屏模式下再编辑该联系人头像都是清晰的.只有第一次的时候显示不清晰. 期 ...

  2. 使用 Picasso 加载显示联系人头像

    Picasso 自带了对加载显示联系人头像的支持,只要传入联系人头像的 URL,例如 "photo:content://com.android.contacts/contacts/1005/ ...

  3. android 短信查询、头像、联系人名称(支持会话和短信)

    背景: 在开发全局搜索中,要求搜索短信内容.其中短信包含短信列表和会话列表. 要求显示短信头像.联系人名称.短信内容.时间等. 准备工作: 一开始以为直接查询短信数据库(Telephony.Sms.C ...

  4. linux通讯录软件带头像,Ubuntu联系人应用已支持增强的头像功能

    为下一代Ubuntu设计的新一代软件们正在通过多方面的支持逐步的建立起来,包括了一套由第三方的程序员和Ubuntu程序员及设计者们一起开发出来的核心应用,以及他们开发出来的越来越多的官方应用. 在官方 ...

  5. php 谷歌vard 电话薄联系人头像,[Exchange] 如何为 Exchange 用户添加联系人头像

    在 Exchange 2010 和 Outlook 2010 环境中微软允许我们为 Exchange 用户添加联系人头像,这样一来我们能够更轻松地识别用户,而在操作时也会感觉更加友好.如下图所示: 在 ...

  6. 如何为Exchange 2010 用户添加联系人头像

    在 Exchange Server 2010 和 Outlook 2010 中可以实现为联系人添加头像照片信息,这样可以方便企业中的邮件使用者在查找联系人或收到别人发送的邮件时,更加确定对方的身份,并 ...

  7. 如何为 Exchange 用户添加联系人头像

    http://windows.itwaka.com/Exchange/69447.html 在 Exchange 2010 和 Outlook 2010 环境中微软允许我们为 Exchange 用户添 ...

  8. 短信 无联系人头像 控件修改

    短信模块 修改 选择 添加联系人 主界面中的控件 选择view RecipientsEditor 继承 RecipientEditTextView 查询了以后才知道这是 系统 framework层的一 ...

  9. android contacts电话查询头像,android透过查询电话号码获取联系人头像

    android通过查询电话号码获取联系人头像 // 取得Intent中的頭像 ivShowImage = (ImageView) findViewById(R.id.call_log_detail_c ...

最新文章

  1. Standalone WSGI Containers
  2. nmap 获取主机名
  3. win10 ObservableCollection 排序自动收缩问题
  4. 【手把手教学】基于Maven构建方式使用Mybatis generator自动生成
  5. C/C++中善用大括号
  6. jax-rs jax-ws_创建一个简单的JAX-RS MessageBodyWriter
  7. 王道考研 计算机网络7 TCP/IP参考模型
  8. 雷军谈小米10的3999元起售价:定价比华为苹果厚道
  9. OSPF区域间路由计算规则与实验
  10. CPU内部看门狗,外部看门狗以及软件看门狗
  11. VSCODE快速添加到鼠标右键菜单
  12. MAC配置IOS、Android真机以及appium环境配置,最新版(一)
  13. js格式化日期和事件
  14. 浅显易懂的理解SQL各种锁(基于MYSQL 8.0.28)
  15. 微信订阅消息(后端)教程
  16. C++之函数后面加const
  17. java vm art 2.1.0_ART Runtime 创建(二)--启动参数
  18. Python pandas 实现无缝衔接Bokeh
  19. Synchronized局限性
  20. GridView 不换行

热门文章

  1. 计算机 小学数学应用题教学设计,小学数学如何有效地进行应用题教学设计
  2. 计量经济学及Stata应用 第四章习题
  3. 渗透测试基础 - bypass-绕过阻挡我们的WAF(上)
  4. Android RecyclerView多样式列表实践指南
  5. 神盾特工hive_《神盾局特工》第四季剧情:黛西黑化?
  6. 白帽子黑客与网络安全工程师带你:远程桌面漏洞利用与Windows7计算机攻防实战
  7. 微信支付API v3 Native支付
  8. tableau复合图形示例:三张图形描述一张成绩单
  9. 企业微信 引入微信api扫一扫(vue)【h5页面调用微信jssdk】
  10. 【通信系统】移动通信系统基础知识