Android自定義view之emoji鍵盤

歡迎你們訪問個人我的博客android

主要仍是最近作了一個emoji鍵盤的需求,感受能夠簡單封裝一下順便整理下emoji相關的知識ios

Android中的 emoji

有關Android中emoji的文章有不少了,我就不簡單羅列相關內容了,在這記錄一下開發過程當中遇到的一些坑...git

  1. 首先是TextView首次繪製中emoji的顏色會偏淺,官方的demo中依然存在這種問題...

官方demo

(詳情能夠參考https://github.com/googlesamples/android-EmojiCompat) ,上圖中能夠看到其中兩個Textview的emoji顏色偏淺,可是EditView中就不會出現這個問題...github

解決方法的話暫時有兩種,一是針對不能引入EmojiCompat的項目,能夠考慮針對textview屢次繪製,可是對此Textview設置background的時候會失效... 二是能夠針對能夠引入EmojiCompat的項目,可是簡單的直接設置EmojiCompat仍然很差用...經過自定義View即demo中的Custom TextView即刻解決這個問題工具

  1. 原生emoji的適配問題

不一樣版本的系統中適配的emoji是不一樣的,通常來講高版本兼容低版本的emoji.開發工具

另外一個就是國產rom的問題,部分rom中會將android的emoji圖標替換成ios的emoji.會給人一種也沒什麼差異的錯覺...可是,好歹都適配了啊,部分圖標仍是android的emoji風格,就很迷優化

  1. emoji的大小問題

emoji的大小...是跟隨TextView的textSize,因此要想調整emoji的大小,須要更改textView的textSize值.動畫

  1. EditText的刪除問題

鍵盤嘛,須要對editText進行操做,其中就包括了刪除的操做,然而,emoji有的佔兩個字節,有的佔一個本身.因此再刪除的時候須要驗證內容再刪除對應的字節google

簡單來講,及時更新設備或者開發工具的話emoji展現並非什麼問題,願望是美好的,現實卻老是不進如人意.(只有我以爲Android的果凍人emoji看着還能夠麼...)設計

Emoji鍵盤

先展現效果圖,

完成效果圖

一個emoji鍵盤的主要功能都實現了,包括了emoji的輸入及刪除,多個emoji標籤頁之間的切換及底部滑動指示器的更改.須要展現底部標籤頁超過屏幕範圍的效果,因此展現的部分數據是重複的.

設計過程

最初的設計中是沒有底部多個emoji標籤頁的,感受功能有點單薄,因此後期加入了底部過個item切換的功能

整個View設計以下,

整個View設計

  1. emoji展現與選擇區域: 主要是用於展現emoji的內容,這裏使用了ViewPager,在初始化的時候會對emoji展現列表進行計算,最終填充到ViewPager中.對於整個View來講,在初始化ViewPager的Adapter的時候就將全部的emoji填入,在滑動或者選擇底部item的時候會根據初始化中計算好的各個頁面的展現信息控制指示器及底部item.
  2. ViewPager的指示器: 其實是一個LinearLayout,根據設置展現對應的數量及位置,此處展現的是當前item的相關指示器,當選擇新的item或者滑動到新的item後,指示器的數量會進行更新,而當上面的ViewPager滑動卻沒有切換到新的item的時候只是更新指示器指示的內容.
  3. emoji標籤部分: 使用了一個RecycleView,是由於當標籤比較多時候滑動效果和定位展現比較方便.

設計缺陷

  • 暫只支持emoji選擇,不能提供自定義圖片輸入(感受更改完了就不僅是emoji輸入器了,下個就作這個了)
  • 底部指示器如今更新的過程當中是所有移除view再根據新參數設置新view沒有動畫效果
  • 底部emoji標籤頁再當選擇的item手動滑動超出屏幕顯示外後,再次滑動頂部ViewPager頁面,底部item復位動畫有點僵,仍有優化的餘地

代碼實現

  1. emoji展現與選擇區域:

主要是針對頂部ViewPager的Adapter處理

emoji展現與選擇區域

  1. EditText文本控制

再將EditText綁定到view中後,對view進行操做後會更改EditText的內容

EditText文本控制

須要注意的是再刪除的時候是要先驗證後兩位是不是一個完整emoji,若是是則刪除後兩個字節,反之則只刪除一個字節.

  1. 底部標籤頁指示器

簡單的一個LinearLayout來展現指示器,沒有切換的動畫效果,能夠優化一波.

底部標籤頁指示器

  1. 底部標籤選擇器

經過一個RecycleView來實現的底部標籤選擇器

底部標籤選擇器

  1. 監聽ViewPager滑動及底部標籤選擇

添加ViewPager的addOnPageChangeListener方法來監聽滑動及底部標籤選擇的點擊回調

監聽ViewPager滑動及底部標籤選擇

相關代碼能夠訪問個人GitHub來獲取,歡迎你們start或者提供建議.

相關文章
相關標籤/搜索