1. 程式人生 > >Android自定義鍵盤問題記錄

Android自定義鍵盤問題記錄

公司為了保障密碼安全,研發了一套自定義鍵盤取代系統鍵盤,原理很簡單,一個PopupWindow,在EditText獲得焦點時show,失去焦點dismiss。

但用在專案組上的時候出現問題。


       專案的輸入框

        輸入框是一個自定義控制元件,繼承自EditText,實現OnFocusChangeListener,TextWatcher兩個介面。當輸入字元時,如果字元個數大於0,

呼叫setCompoundDrawablesWithIntrinsicBounds (Drawable left, Drawable top, Drawable right, Drawable bottom) 。給right一張圖片。

輸入框右邊有個x的圖片,點選刪除圖片,清空文字,效果如下:



鍵盤實現原理

        構建鍵盤時,傳入兩個引數,輸入控制元件EditText和一個ViewGroup的ID。EditText為需要使用自定義鍵盤的輸入框,鍵盤內部監聽輸入框的OnClickListener和OnFocusChangeListener事件,用來show和dismiss自定義鍵盤。ID為當鍵盤show或dismiss時,需要調整的佈局。佈局調整用到的函式為layout方法。


  問題:

       當輸入框被鍵盤遮擋時,需要調整ViewGroup的佈局,即鍵盤彈出時,ViewGroup需要向上移動等於鍵盤高度的距離。當我們輸入一個字元時,ViewGroup重新置為初始狀態,輸入控制元件被遮擋。經過兩天的分析,原來輸入框字元變化時,觸發setCompoundDrawablesWithIntrinsicBounds (Drawable left, Drawable top, Drawable right, Drawable bottom) ,所以出現問題。


解決方案:拿了套公司最新的自定義鍵盤。有時間再研究。