ListPreference的summary和entries中插入圖片

好記性不如爛筆頭。生活中多作筆記,不只能夠方便本身,還能夠方便他人。佈局

背景

以往,絕大多數的,咱們的ListPreference的summary和entries都是純文字的,這沒啥可說的,簡單方便嘛。忽然有一天,產品經理跟我說,這個加上個圖片會更生動好看一點。做爲「」開發汪」,面對新的東西,心裏是「」雞凍」澎湃的,立馬拍拍胸口「包在我身上」。google

正文

看到這樣的樣式,第一想法是重寫view替換其中的佈局,挺簡單的嘛,不就是繪製一下文字跟圖片而已,位置隨便來,想怎麼搞就怎麼搞。因而我着手看源碼,尋找佈局,找接口。看到 setDialogLayoutResource 時心中暗想「這不是挺簡單的嘛」。然而問題來了,我得替換整個佈局,前提是不能修改整個彈框的風格,由於這個ListPreference得跟其餘的看起來一個風格,若是把佈局寫得如出一轍也不是不行,但感受有點小題大做了。cdn

個人目標很明確,只是插入一個圖標而已,僅此而已啊!blog

前面的方法不實際,因而我繼續google,百度。找着找着,我忽然想起,作到文字中插入圖片的還有一個辦法,那就是 SpannableString。因而我趕忙看回ListPreference的源碼,重點來了。繼承

ListPreference的setSummary方法:接口


setSummary

ListPreference的setEntries方法:圖片


setEntries

從上面的兩個方法看,文字的傳入都是CharSequence類型,再看看SpannableString,恰好是實現了CharSequence接口。開發

好了,思路有了,說幹就幹。字符串

代碼很是的簡單,就那麼幾句,上圖:get


oncreate()

createEntrie()

建立好SpannableString以後,咱們就能夠插入圖片了,位置能夠隨便插。這裏以插入中間爲例。上面的「image」就是我要替換爲圖片的字符串,咱們要插入的是圖片,因此只能經過ImageSpan,注意setSpan的時候start和end的位置要算對。

細心的你會發現,我上面用的TestListPreference,並非ListPreference,爲啥?由於我重寫了ListPreference,爲啥要重寫?由於我發現,ListPreference的mSummary是String類型,這樣的話,咱們的的summary就沒法插入圖片了,因此重寫了setSummary方法和getSummary方法:


TestListPreference

好了,成功的在summary和entries中插入圖片,來看當作果:


演示圖1

然而,你會發現,圖片的位置水平方向沒有居中,偏下沉了,因此咱們還要調整一下。

繼承ImageSpan,咱們從新draw方法:


CenteredImageSpan

代碼比較簡單,我就直接所有貼出來了。

OK,咱們再來看看效果:


演示圖2

好了,所有完成了。

結尾

東西比較簡單,內容也很少,但仍是寫出來,喜歡就拿去唄,反正又不要錢,並且我也是參考了網上不少的資料。

相關文章
相關標籤/搜索