Android自定义键盘,仿招商银行
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                Android自定义键盘,仿招商银行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                解決方案
- 輕量級解決方案-PopupWindow實現。
 - 項目地址:github.com/Ninja2005/M…
 - 鍵盤效果:
 
實現原理
1.通過PopupWindow顯示自定義鍵盤
mKeyboardView = (MyKeyboardView) mIncludeKeyboardview.findViewById(R.id.keyboard_view); mWindow = new PopupWindow(mIncludeKeyboardview, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT, false); mWindow.showAtLocation(mParent, Gravity.BOTTOM, 0, 0); 復制代碼2.實現自定義鍵盤(支持切換字母、數字、符號、隨機鍵盤)
class MyKeyboardView extends KeyboardView {public void init(EditText editText, PopupWindow window, int keyBoardType) {this.mEditText = editText;this.mWindow = window;if (keyBoardType == KEYBOARDTYPE_Pwd)isPwd = true;setEnabled(true);setPreviewEnabled(false);setOnKeyboardActionListener(mOnKeyboardActionListener);//按鍵監聽setKeyBoardType(keyBoardType);}//鍵盤類型支持字母、數字、符號、隨機鍵盤public void setKeyBoardType(int keyBoardType) {switch (keyBoardType) {case KEYBOARDTYPE_Num:if (keyboardNum == null)keyboardNum = new Keyboard(getContext(), R.xml.keyboard_number);setKeyboard(keyboardNum);break;case KEYBOARDTYPE_ABC:if (keyboardABC == null)keyboardABC = new Keyboard(getContext(), R.xml.keyboard_abc);setKeyboard(keyboardABC);break;case KEYBOARDTYPE_Pwd:if (keyboardPwd == null)keyboardPwd = new Keyboard(getContext(), R.xml.keyboard_number);randomKey(keyboardPwd);setKeyboard(keyboardPwd);break;case KEYBOARDTYPE_Symbol:if (keyboardSymbol == null)keyboardSymbol = new Keyboard(getContext(), R.xml.keyboard_symbol);setKeyboard(keyboardSymbol);break;}} } 復制代碼3.點擊空白處隱藏鍵盤 (重寫View的事件分發)
@Overridepublic boolean dispatchTouchEvent(MotionEvent ev) {switch (ev.getAction()) {case MotionEvent.ACTION_DOWN:cancelOvertimeRunable();if (KeyboardTool.isTouchView(filterViewByIds(), ev))//過濾的EditText,不做處理return super.dispatchTouchEvent(ev);View v = getCurrentFocus();if (KeyboardTool.isFocusEditText(v, systemEditViewIds())//當前焦點在系統鍵盤EditText&& !KeyboardTool.isTouchView(systemEditViewIds(), ev)) {//且沒有觸摸在系統鍵盤EditTextKeyboardTool.hideInputForce(mContext, v);//隱藏系統鍵盤v.clearFocus();//清空焦點} else if (KeyboardTool.isFocusEditText(v, customEditViewIds())//當前焦點在自定義鍵盤EditText&& !KeyboardTool.isTouchView(customEditViewIds(), ev)) {//且沒有觸摸在自定義鍵盤EditTextif (getKeyboardUtil() != null)//隱藏自定義鍵盤getKeyboardUtil().hide();v.clearFocus();//清空焦點}break;case MotionEvent.ACTION_UP:startOvertimeRunable();break;}return super.dispatchTouchEvent(ev);} 復制代碼4.鍵盤上推(設置根布局margintop)
//調整父控件位置,鍵盤不擋住編輯框 int nKeyBoardToTopHeight = mHeightPixels - mKeyboardHeight;//屏幕高度-鍵盤高度 int[] editLocal = new int[2]; editText.getLocationOnScreen(editLocal); ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) mParent.getLayoutParams(); if (editLocal[1] + mEditTextHeight * 2 > nKeyBoardToTopHeight) {int height = editLocal[1] - lp.topMargin - nKeyBoardToTopHeight;int mScrollToValue = height + mEditTextHeight * 2;lp.topMargin = 0 - mScrollToValue;mParent.setLayoutParams(lp);mScrollTo = true; } 復制代碼轉載于:https://juejin.im/post/5c331c3f51882524b77b587d
總結
以上是生活随笔為你收集整理的Android自定义键盘,仿招商银行的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 遇见未来 | 对话叶毓睿:人类文明运行在
 - 下一篇: 绑定点击事件调用百度微信分享