好记性不如烂笔头。生活中多作笔记,不只能够方便本身,还能够方便他人。布局
以往,绝大多数的,咱们的ListPreference的summary和entries都是纯文字的,这没啥可说的,简单方便嘛。忽然有一天,产品经理跟我说,这个加上个图片会更生动好看一点。做为“”开发汪”,面对新的东西,心里是“”鸡冻”澎湃的,立马拍拍胸口“包在我身上”。google
看到这样的样式,第一想法是重写view替换其中的布局,挺简单的嘛,不就是绘制一下文字跟图片而已,位置随便来,想怎么搞就怎么搞。因而我着手看源码,寻找布局,找接口。看到 setDialogLayoutResource 时心中暗想“这不是挺简单的嘛”。然而问题来了,我得替换整个布局,前提是不能修改整个弹框的风格,由于这个ListPreference得跟其余的看起来一个风格,若是把布局写得如出一辙也不是不行,但感受有点小题大做了。cdn
个人目标很明确,只是插入一个图标而已,仅此而已啊!blog
前面的方法不实际,因而我继续google,百度。找着找着,我忽然想起,作到文字中插入图片的还有一个办法,那就是 SpannableString。因而我赶忙看回ListPreference的源码,重点来了。继承
ListPreference的setSummary方法:接口
ListPreference的setEntries方法:图片
从上面的两个方法看,文字的传入都是CharSequence类型,再看看SpannableString,恰好是实现了CharSequence接口。开发
好了,思路有了,说干就干。字符串
代码很是的简单,就那么几句,上图:get
建立好SpannableString以后,咱们就能够插入图片了,位置能够随便插。这里以插入中间为例。上面的“image”就是我要替换为图片的字符串,咱们要插入的是图片,因此只能经过ImageSpan,注意setSpan的时候start和end的位置要算对。
细心的你会发现,我上面用的TestListPreference,并非ListPreference,为啥?由于我重写了ListPreference,为啥要重写?由于我发现,ListPreference的mSummary是String类型,这样的话,咱们的的summary就没法插入图片了,因此重写了setSummary方法和getSummary方法:
好了,成功的在summary和entries中插入图片,来看当作果:
然而,你会发现,图片的位置水平方向没有居中,偏下沉了,因此咱们还要调整一下。
继承ImageSpan,咱们从新draw方法:
代码比较简单,我就直接所有贴出来了。
OK,咱们再来看看效果:
好了,所有完成了。
东西比较简单,内容也很少,但仍是写出来,喜欢就拿去呗,反正又不要钱,并且我也是参考了网上不少的资料。