com.paf.rn.view.KeyBoardView Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of react-native Show documentation
Show all versions of react-native Show documentation
A framework for building native apps with React
/*
* 文件名: KeyBoardView.java
* 版 权: Copyright PingAn Technology All Rights Reserved.
* 描 述: [该类的简要描述]
* 创建人: EX-XUJIAO001
* 创建时间: 2012-2-6
*
* 修改人:
* 修改时间:
* 修改内容:[修改内容]
*/
package com.paf.rn.view;
import android.annotation.TargetApi;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.os.SystemClock;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.InputDevice;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
import android.widget.TextView;
import com.facebook.react.R;
import java.util.ArrayList;
import java.util.List;
/**
* 密码键盘
*
* @author EX-XUJIAO001
* @version [Android PABank C01, @2012-2-6]
* @date 2012-2-6
* @description
*/
public class KeyBoardView extends PopupWindow implements OnClickListener, OnTouchListener {
private Button btnq;
private Button btnw;
private Button btne;
private Button btnr;
private Button btnt;
private Button btny;
private Button btnu;
private Button btni;
private Button btno;
private Button btnp;
private Button btna;
private Button btns;
private Button btnd;
private Button btnf;
private Button btng;
private Button btnh;
private Button btnj;
private Button btnk;
private Button btnl;
private Button btnz;
private Button btnx;
private Button btnc;
private Button btnv;
private Button btnb;
private Button btnn;
private Button btnm;
private OnKeyDownBtnListener onKeyDownBtnListener;
private Button btnpoint;
private ImageView keyboardDot;
private ImageView keyboardShift;
private int keyBoradType = -1;
private int letterTag = 0;
private boolean isDelPress = false;
private int linearDelWidth;
private int linearDelHeight;
private int clickTimes;
private Context context;
private KeyView popKeyView;
private EditText editText;
private OnKeyboardShowListener mKeyboardShowListener;
private static final int FIRST_DELETE_DELAYED_TIME = 1500;
private static final int SECOND_DELETE_DELAYED_TIME = 150;
private static final int SENDEVENT = 300;
public static final int KEYBOARD_TYPE_NUM = -1;//数字键盘
public static final int KEYBOARD_TYPE_FULL = 2;//全键盘
/**
* [构造简要说明]
*
* @param contentView
* @param width
* @param height
*/
public KeyBoardView(View contentView, int width, int height, int keyBoardType, Context context) {
super(contentView, width, height);
this.keyBoradType = keyBoardType;
this.context = context;
init();
}
public static int getActualSize(Context ctx, int orgSize) {
WindowManager windowManager = (WindowManager) ctx.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getMetrics(displayMetrics);
float density = displayMetrics.density;
return (int) (orgSize * density);
}
/**
* 初始化
*/
private void init() {
ViewGroup contentView = (ViewGroup) getContentView();
View view = LayoutInflater.from(context).inflate(R.layout.pop_key, null);
int w = getActualSize(this.context, 66);
int y = getActualSize(this.context, 66);
popKeyView = new KeyView(view, w, y);
btnViewList = new ArrayList();
contentView.setOnTouchListener(keyTouchListener);
(contentView.findViewById(R.id.btn1)).setOnClickListener(this);
(contentView.findViewById(R.id.btn2)).setOnClickListener(this);
(contentView.findViewById(R.id.btn3)).setOnClickListener(this);
(contentView.findViewById(R.id.btn4)).setOnClickListener(this);
(contentView.findViewById(R.id.btn5)).setOnClickListener(this);
(contentView.findViewById(R.id.btn6)).setOnClickListener(this);
(contentView.findViewById(R.id.btn7)).setOnClickListener(this);
(contentView.findViewById(R.id.btn8)).setOnClickListener(this);
(contentView.findViewById(R.id.btn9)).setOnClickListener(this);
(contentView.findViewById(R.id.btn0)).setOnClickListener(this);
btnpoint = (Button) contentView.findViewById(R.id.btnpoint);
btnpoint.setOnClickListener(this);
View lineardel = contentView.findViewById(R.id.lineardel);
if (lineardel != null) {
lineardel.setOnClickListener(this);
lineardel.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
onTouchEventDispatch(v, event);
return false;
}
});
}
View linearLinearDel = contentView.findViewById(R.id.linear_lineardel);
if (linearLinearDel != null) {
linearLinearDel.setOnClickListener(this);
linearLinearDel.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
onTouchEventDispatch(v, event);
return false;
}
});
}
View btnDigitSure1 = contentView.findViewById(R.id.digitbtnsure1);
if (btnDigitSure1 != null) {
btnDigitSure1.setOnClickListener(this);
}
View btnDigitSure2 = contentView.findViewById(R.id.digitbtnsure2);
if (btnDigitSure2 != null) {
btnDigitSure2.setOnClickListener(this);
}
// 如果不等于-1表示当前的键盘是全键盘
if (keyBoradType != -1) {
LetterKeyBoardFirstLineContainer llLine1 = (LetterKeyBoardFirstLineContainer) contentView.findViewById(R.id.ll_line0);
LetterKeyBoardNormalLineContainer llLine2 = (LetterKeyBoardNormalLineContainer) contentView.findViewById(R.id.ll_line1);
LetterKeyBoardNormalLineContainer llLine3 = (LetterKeyBoardNormalLineContainer) contentView.findViewById(R.id.ll_line2);
llLine1.addLine(llLine2);
llLine1.addLine(llLine3);
contentView.findViewById(R.id.linear_btn0).setOnClickListener(this);
contentView.findViewById(R.id.linear_btnpoint).setOnClickListener(this);
contentView.findViewById(R.id.btnABC).setOnClickListener(this);
contentView.findViewById(R.id.btnsignABC).setOnClickListener(this);
btnq = (Button) contentView.findViewById(R.id.btnq);
btnw = (Button) contentView.findViewById(R.id.btnw);
btne = (Button) contentView.findViewById(R.id.btne);
btnr = (Button) contentView.findViewById(R.id.btnr);
btnt = (Button) contentView.findViewById(R.id.btnt);
btny = (Button) contentView.findViewById(R.id.btny);
btnu = (Button) contentView.findViewById(R.id.btnu);
btni = (Button) contentView.findViewById(R.id.btni);
btno = (Button) contentView.findViewById(R.id.btno);
btnp = (Button) contentView.findViewById(R.id.btnp);
btna = (Button) contentView.findViewById(R.id.btna);
btns = (Button) contentView.findViewById(R.id.btns);
btnd = (Button) contentView.findViewById(R.id.btnd);
btnf = (Button) contentView.findViewById(R.id.btnf);
btng = (Button) contentView.findViewById(R.id.btng);
btnh = (Button) contentView.findViewById(R.id.btnh);
btnj = (Button) contentView.findViewById(R.id.btnj);
btnk = (Button) contentView.findViewById(R.id.btnk);
btnl = (Button) contentView.findViewById(R.id.btnl);
btnz = (Button) contentView.findViewById(R.id.btnz);
btnx = (Button) contentView.findViewById(R.id.btnx);
btnc = (Button) contentView.findViewById(R.id.btnc);
btnv = (Button) contentView.findViewById(R.id.btnv);
btnb = (Button) contentView.findViewById(R.id.btnb);
btnn = (Button) contentView.findViewById(R.id.btnn);
btnm = (Button) contentView.findViewById(R.id.btnm);
contentView.findViewById(R.id.linearshift).setOnClickListener(this);
contentView.findViewById(R.id.btn123).setOnClickListener(this);
contentView.findViewById(R.id.btnSign123).setOnClickListener(this);
contentView.findViewById(R.id.linearSwiChar).setOnClickListener(this);
contentView.findViewById(R.id.btnSignSwiChar).setOnClickListener(this);
contentView.findViewById(R.id.btnsure).setOnClickListener(this);
contentView.findViewById(R.id.digitbtnsure1).setOnClickListener(this);
contentView.findViewById(R.id.digitbtnsure2).setOnClickListener(this);
contentView.findViewById(R.id.btsignnsure).setOnClickListener(this);
contentView.findViewById(R.id.linearspace).setOnClickListener(this);
btnViewList.add(btnq);
btnViewList.add(btnw);
btnViewList.add(btne);
btnViewList.add(btnr);
btnViewList.add(btnt);
btnViewList.add(btny);
btnViewList.add(btnu);
btnViewList.add(btni);
btnViewList.add(btno);
btnViewList.add(btnp);
btnViewList.add(btna);
btnViewList.add(btns);
btnViewList.add(btnd);
btnViewList.add(btnf);
btnViewList.add(btng);
btnViewList.add(btnh);
btnViewList.add(btnj);
btnViewList.add(btnk);
btnViewList.add(btnl);
btnViewList.add(btnz);
btnViewList.add(btnx);
btnViewList.add(btnc);
btnViewList.add(btnv);
btnViewList.add(btnb);
btnViewList.add(btnn);
btnViewList.add(btnm);
LinearLayout linearcharDel = (LinearLayout) contentView.findViewById(R.id.linearchardel);
linearcharDel.setOnClickListener(this);
linearcharDel.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
onTouchEventDispatch(v, event);
return false;
}
});
contentView.findViewById(R.id.lt).setOnClickListener(this);
contentView.findViewById(R.id.gt).setOnClickListener(this);
contentView.findViewById(R.id.leftbracket).setOnClickListener(this);
contentView.findViewById(R.id.rightbracket).setOnClickListener(this);
contentView.findViewById(R.id.leftbracketshift).setOnClickListener(this);
contentView.findViewById(R.id.rightbracketshift).setOnClickListener(this);
contentView.findViewById(R.id.backslash).setOnClickListener(this);
contentView.findViewById(R.id.backslashshift).setOnClickListener(this);
contentView.findViewById(R.id.comma).setOnClickListener(this);
contentView.findViewById(R.id.period).setOnClickListener(this);
contentView.findViewById(R.id.slashshift).setOnClickListener(this);
contentView.findViewById(R.id.exclamationmark).setOnClickListener(this);
contentView.findViewById(R.id.semicolonshift).setOnClickListener(this);
contentView.findViewById(R.id.semicolon).setOnClickListener(this);
contentView.findViewById(R.id.at).setOnClickListener(this);
contentView.findViewById(R.id.signat).setOnClickListener(this);
contentView.findViewById(R.id.graveshift).setOnClickListener(this);
contentView.findViewById(R.id.bottomline).setOnClickListener(this);
contentView.findViewById(R.id.middleline).setOnClickListener(this);
contentView.findViewById(R.id.quot).setOnClickListener(this);
contentView.findViewById(R.id.apos).setOnClickListener(this);
contentView.findViewById(R.id.slash).setOnClickListener(this);
contentView.findViewById(R.id.pound).setOnClickListener(this);
contentView.findViewById(R.id.star).setOnClickListener(this);
contentView.findViewById(R.id.plus).setOnClickListener(this);
contentView.findViewById(R.id.sleftbracket).setOnClickListener(this);
contentView.findViewById(R.id.srightbracket).setOnClickListener(this);
contentView.findViewById(R.id.dol).setOnClickListener(this);
contentView.findViewById(R.id.equals).setOnClickListener(this);
contentView.findViewById(R.id.with).setOnClickListener(this);
contentView.findViewById(R.id.remainder).setOnClickListener(this);
contentView.findViewById(R.id.topsharp).setOnClickListener(this);
contentView.findViewById(R.id.grave).setOnClickListener(this);
keyboardDot = (ImageView) contentView.findViewById(R.id.keyboard_dot);
keyboardShift = (ImageView) contentView.findViewById(R.id.keyboard_shift);
}
}
public int getKeyBoradType() {
return keyBoradType;
}
public void setKeyBoradType(int keyBoradType) {
this.keyBoradType = keyBoradType;
}
public void setBtnpoint(Button btnpoint) {
this.btnpoint = btnpoint;
}
public Button getBtnpoint() {
return btnpoint;
}
private List btnViewList;
private OnTouchListener keyTouchListener = new OnTouchListener() {
private View preView;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (keyBoradType != 2) {
return false;
}
if (preView != null && event.getAction() == MotionEvent.ACTION_UP) {
//preView.setBackgroundResource(R.drawable.keyboard_btn_c);
preView.setBackgroundResource(R.drawable.paf_keyboard_btn_general_up);
KeyBoardView.this.onTouch(preView, event);
preView = null;
return true;
}
int[] location = new int[2];
int gx = (int) event.getX();
int gy = (int) event.getY();
for (View view : btnViewList) {
view.getLocationInWindow(location);
int top = location[1];
int buttom = top + view.getHeight();
int left = location[0];
int right = left + view.getWidth();
if (gx > left && gy > top && gx < right && gy < buttom) {
if (preView == null) {
preView = view;
//preView.setBackgroundResource(R.drawable.keyboard_btn_c);
preView.setBackgroundResource(R.drawable.paf_keyboard_btn_general_down);
} else if (preView != view) {
//preView.setBackgroundResource(R.drawable.keyboard_btn);
preView.setBackgroundResource(R.drawable.paf_keyboard_btn_general_up);
preView = view;
//preView.setBackgroundResource(R.drawable.keyboard_btn_c);
preView.setBackgroundResource(R.drawable.paf_keyboard_btn_general_down);
}
return KeyBoardView.this.onTouch(view, event);
}
}
return false;
}
};
private void onTouchEventDispatch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
isDelPress = true;
new Thread(new DeleteTask()).start();
linearDelWidth = v.getWidth();
linearDelHeight = v.getHeight();
break;
case MotionEvent.ACTION_MOVE:
if (event.getX() < 0 || event.getY() < 0
|| event.getX() > linearDelWidth
|| event.getY() > linearDelHeight) {
isDelPress = false;
}
break;
case MotionEvent.ACTION_UP:
isDelPress = false;
break;
default:
break;
}
}
@Override
public void onClick(View v) {
int id = v.getId();
if (id == R.id.btn1) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_1));
}
} else if (id == R.id.btn2) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_2));
}
} else if (id == R.id.btn3) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_3));
}
} else if (id == R.id.btn4) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_4));
}
} else if (id == R.id.btn5) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_5));
}
} else if (id == R.id.btn6) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_6));
}
} else if (id == R.id.btn7) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_7));
}
} else if (id == R.id.btn8) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_8));
}
} else if (id == R.id.btn9) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_9));
}
} else if (id == R.id.btn0) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0));
}
} else if (id == R.id.btnpoint) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_PERIOD));
}
} else if (id == R.id.btn123 || id == R.id.btnSign123) {
//变更键盘
if (onSwitchKeyBoardListenter != null) {
onSwitchKeyBoardListenter.onSwitchKeyBoard(1);
}
//如果目前键盘是大写 就切换成小写
if (letterTag == 1) {
keyboardShift.setBackgroundResource(R.drawable.paf_keyboard_shift_no);
keyboardDot.setBackgroundResource(R.drawable.paf_keyboard_white_dot);
updateLetterKeyBoard(letterTag);
letterTag = 0;
clickTimes = 0;
}
} else if (id == R.id.linearSwiChar || id == R.id.btnSignSwiChar) {
//特殊字符键盘切换
if (onSwitchKeyBoardListenter != null) {
onSwitchKeyBoardListenter.onSwitchKeyBoard(3);
}
//如果目前键盘是大写 就切换成小写
if (letterTag == 1) {
keyboardShift.setBackgroundResource(R.drawable.paf_keyboard_shift_no);
keyboardDot.setBackgroundResource(R.drawable.paf_keyboard_white_dot);
updateLetterKeyBoard(letterTag);
letterTag = 0;
clickTimes = 0;
}
} else if (id == R.id.btnABC || id == R.id.btnsignABC) {
if (onSwitchKeyBoardListenter != null) {
onSwitchKeyBoardListenter.onSwitchKeyBoard(2);
}
if (letterTag == 1) {
updateLetterKeyBoard(letterTag);
letterTag = 0;
}
} else if (id == R.id.linear_btn0) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_0));
}
} else if (id == R.id.linear_btnpoint) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_PERIOD));
}
} else if (id == R.id.btnsure || id == R.id.digitbtnsure1 || id == R.id.digitbtnsure2 || id == R.id.btsignnsure) {
if (onKeySureBtnListener != null) {
onKeySureBtnListener.onKeySureBtn();
}
} else if (id == R.id.linearspace) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SPACE));
}
} else if (id == R.id.linearshift) {
clickTimes++;
if (onKeyDownBtnListener != null) {
//切换成一次性大写
if (clickTimes == 1) {
if (letterTag == 0) {
keyboardShift.setBackgroundResource(R.drawable.paf_keyboard_shift);
updateLetterKeyBoard(letterTag);
letterTag = 1;
}
}
//切换成永久性大写
else if (clickTimes == 2) {
keyboardDot.setBackgroundResource(R.drawable.paf_keyboard_blue_dot);
}
//切换成小写
else if (clickTimes == 3) {
keyboardShift.setBackgroundResource(R.drawable.paf_keyboard_shift_no);
keyboardDot.setBackgroundResource(R.drawable.paf_keyboard_white_dot);
clickTimes = 0;
updateLetterKeyBoard(letterTag);
letterTag = 0;
}
}
} else if (id == R.id.lt) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock.uptimeMillis(), "<", KeyCharacterMap.BUILT_IN_KEYBOARD, 0));
}
} else if (id == R.id.gt) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock.uptimeMillis(), ">", KeyCharacterMap.BUILT_IN_KEYBOARD, 0));
}
} else if (id == R.id.leftbracket) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_LEFT_BRACKET));
}
} else if (id == R.id.rightbracket) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_RIGHT_BRACKET));
}
} else if (id == R.id.leftbracketshift) {
if (onKeyDownBtnListener != null) {
onCapitalKeyDownBtn(KeyEvent.KEYCODE_LEFT_BRACKET);
}
} else if (id == R.id.rightbracketshift) {
if (onKeyDownBtnListener != null) {
onCapitalKeyDownBtn(KeyEvent.KEYCODE_RIGHT_BRACKET);
}
} else if (id == R.id.backslash) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACKSLASH));
}
} else if (id == R.id.backslashshift) {
if (onKeyDownBtnListener != null) {
onCapitalKeyDownBtn(KeyEvent.KEYCODE_BACKSLASH);
}
} else if (id == R.id.sleftbracket) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock.uptimeMillis(), "(", KeyCharacterMap.BUILT_IN_KEYBOARD, 0));
}
} else if (id == R.id.srightbracket) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock.uptimeMillis(), ")", KeyCharacterMap.BUILT_IN_KEYBOARD, 0));
}
} else if (id == R.id.dol) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock.uptimeMillis(), "$", KeyCharacterMap.BUILT_IN_KEYBOARD, 0));
}
} else if (id == R.id.equals) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_EQUALS));
}
} else if (id == R.id.with) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock.uptimeMillis(), "&", KeyCharacterMap.BUILT_IN_KEYBOARD, 0));
}
} else if (id == R.id.remainder) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock.uptimeMillis(), "%", KeyCharacterMap.BUILT_IN_KEYBOARD, 0));
}
} else if (id == R.id.topsharp) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock.uptimeMillis(), "^", KeyCharacterMap.BUILT_IN_KEYBOARD, 0));
}
} else if (id == R.id.grave) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_GRAVE));
}
} else if (id == R.id.comma) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_COMMA));
}
} else if (id == R.id.period) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_PERIOD));
}
} else if (id == R.id.slashshift) {
if (onKeyDownBtnListener != null) {
onCapitalKeyDownBtn(KeyEvent.KEYCODE_SLASH);
}
} else if (id == R.id.exclamationmark) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock.uptimeMillis(), "!", KeyCharacterMap.BUILT_IN_KEYBOARD, 0));
}
} else if (id == R.id.semicolonshift) {
if (onKeyDownBtnListener != null) {
onCapitalKeyDownBtn(KeyEvent.KEYCODE_SEMICOLON);
}
} else if (id == R.id.semicolon) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SEMICOLON));
}
} else if (id == R.id.at || id == R.id.signat) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_AT));
}
} else if (id == R.id.graveshift) {
if (onKeyDownBtnListener != null) {
onCapitalKeyDownBtn(KeyEvent.KEYCODE_GRAVE);
}
} else if (id == R.id.bottomline) {
if (onKeyDownBtnListener != null) {
onCapitalKeyDownBtn(KeyEvent.KEYCODE_MINUS);
}
} else if (id == R.id.middleline) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MINUS));
}
} else if (id == R.id.quot) {
if (onKeyDownBtnListener != null) {
onCapitalKeyDownBtn(KeyEvent.KEYCODE_APOSTROPHE);
}
} else if (id == R.id.apos) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_APOSTROPHE));
}
} else if (id == R.id.slash) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SLASH));
}
} else if (id == R.id.pound) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_POUND));
}
} else if (id == R.id.star) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_STAR));
}
} else if (id == R.id.plus) {
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_PLUS));
}
} else {
}
}
private View mParent;
@Override
public void showAtLocation(View parent, int gravity, int x, int y) {
try {
super.showAtLocation(parent, gravity, x, y);
mParent = parent;
if (mKeyboardShowListener != null) {
mKeyboardShowListener.onShow(this.context.getResources()
.getDimensionPixelSize(R.dimen.keyboard_max_height));
}
} catch (Exception ignored) {
}
}
private void sendKeyEvent(int keyEvent, View view, MotionEvent event) {
Button btn = (Button) view;
if (event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_MOVE) {
int location[] = new int[2];
view.getLocationOnScreen(location);
TextView keyTextView = popKeyView.getTextView();
int x = getActualSize(this.context, 17);
int y = getActualSize(this.context, 65);
if (popKeyView.isShowing()) {
if (keyTextView.getText().equals(btn.getText())) {
return;
}
popKeyView.update(location[0] - x, location[1] - y, -1, -1);
} else {
popKeyView.showAtLocation(mParent, Gravity.TOP | Gravity.LEFT, location[0] - x, location[1] - y);
}
keyTextView.setText(btn.getText());
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (onKeyDownBtnListener != null) {
//如果是大写
if (letterTag == 1) {
onCapitalKeyDownBtn(keyEvent);
//如果单击那么大写只是一次性的,点击完大写之后,界面变成小写界面,标志变量回复
if (clickTimes == 1) {
keyboardShift.setBackgroundResource(R.drawable.paf_keyboard_shift_no);
updateLetterKeyBoard(letterTag);
letterTag = 0;
clickTimes = 0;
} else if (clickTimes == 2) {//如果是双击
}
}
//如果是小写
else if (letterTag == 0) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(KeyEvent.ACTION_DOWN, keyEvent));
}
}
if (popKeyView.isShowing()) {
popKeyView.dismiss();
}
}
}
private void updateLetterKeyBoard(int letterTag) {
//如果是小写的话就切换成大写
if (letterTag == 0) {
btnq.setText("Q");
btnw.setText("W");
btne.setText("E");
btnr.setText("R");
btnt.setText("T");
btny.setText("Y");
btnu.setText("U");
btni.setText("I");
btno.setText("O");
btnp.setText("P");
btna.setText("A");
btns.setText("S");
btnd.setText("D");
btnf.setText("F");
btng.setText("G");
btnh.setText("H");
btnj.setText("J");
btnk.setText("K");
btnl.setText("L");
btnz.setText("Z");
btnx.setText("X");
btnc.setText("C");
btnv.setText("V");
btnb.setText("B");
btnn.setText("N");
btnm.setText("M");
}
//如果是大写的话九切换成小写
else if (letterTag == 1) {
btnq.setText("q");
btnw.setText("w");
btne.setText("e");
btnr.setText("r");
btnt.setText("t");
btny.setText("y");
btnu.setText("u");
btni.setText("i");
btno.setText("o");
btnp.setText("p");
btna.setText("a");
btns.setText("s");
btnd.setText("d");
btnf.setText("f");
btng.setText("g");
btnh.setText("h");
btnj.setText("j");
btnk.setText("k");
btnl.setText("l");
btnz.setText("z");
btnx.setText("x");
btnc.setText("c");
btnv.setText("v");
btnb.setText("b");
btnn.setText("n");
btnm.setText("m");
}
}
/**
* event按下监听器
*
* @author EX-XUJIAO001
* @version [Android PABank C01, 2012-2-15]
*/
public interface OnKeyDownBtnListener {
void onKeyDownBtn(KeyEvent event);
}
public void setOnKeyDownBtnListener(OnKeyDownBtnListener onKeyDownBtnListener) {
this.onKeyDownBtnListener = onKeyDownBtnListener;
}
public interface OnSwitchKeyBoardListenter {
void onSwitchKeyBoard(int keyBoardType);
}
private OnSwitchKeyBoardListenter onSwitchKeyBoardListenter;
public void setOnSwitchKeyBoardListenter(
OnSwitchKeyBoardListenter onSwitchKeyBoardListenter) {
this.onSwitchKeyBoardListenter = onSwitchKeyBoardListenter;
}
public interface OnKeySureBtnListener {
void onKeySureBtn();
}
private OnKeySureBtnListener onKeySureBtnListener;
public void setOnKeySureBtnListener(OnKeySureBtnListener onKeySureBtnListener) {
this.onKeySureBtnListener = onKeySureBtnListener;
}
@Override
public void dismiss() {
try {
if (popKeyView.isShowing()) {
popKeyView.dismiss();
}
super.dismiss();
} catch (Exception e) {
Log.e("KeyboardView", "dismiss exception:" + e.getMessage());
}
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int id = v.getId();
if (id == R.id.btnq) {
sendKeyEvent(KeyEvent.KEYCODE_Q, v, event);
} else if (id == R.id.btnw) {
sendKeyEvent(KeyEvent.KEYCODE_W, v, event);
} else if (id == R.id.btne) {
sendKeyEvent(KeyEvent.KEYCODE_E, v, event);
} else if (id == R.id.btnr) {
sendKeyEvent(KeyEvent.KEYCODE_R, v, event);
} else if (id == R.id.btnt) {
sendKeyEvent(KeyEvent.KEYCODE_T, v, event);
} else if (id == R.id.btny) {
sendKeyEvent(KeyEvent.KEYCODE_Y, v, event);
} else if (id == R.id.btnu) {
sendKeyEvent(KeyEvent.KEYCODE_U, v, event);
} else if (id == R.id.btni) {
sendKeyEvent(KeyEvent.KEYCODE_I, v, event);
} else if (id == R.id.btno) {
sendKeyEvent(KeyEvent.KEYCODE_O, v, event);
} else if (id == R.id.btnp) {
sendKeyEvent(KeyEvent.KEYCODE_P, v, event);
} else if (id == R.id.btna) {
sendKeyEvent(KeyEvent.KEYCODE_A, v, event);
} else if (id == R.id.btns) {
sendKeyEvent(KeyEvent.KEYCODE_S, v, event);
} else if (id == R.id.btnd) {
sendKeyEvent(KeyEvent.KEYCODE_D, v, event);
} else if (id == R.id.btnf) {
sendKeyEvent(KeyEvent.KEYCODE_F, v, event);
} else if (id == R.id.btng) {
sendKeyEvent(KeyEvent.KEYCODE_G, v, event);
} else if (id == R.id.btnh) {
sendKeyEvent(KeyEvent.KEYCODE_H, v, event);
} else if (id == R.id.btnj) {
sendKeyEvent(KeyEvent.KEYCODE_J, v, event);
} else if (id == R.id.btnk) {
sendKeyEvent(KeyEvent.KEYCODE_K, v, event);
} else if (id == R.id.btnl) {
sendKeyEvent(KeyEvent.KEYCODE_L, v, event);
} else if (id == R.id.btnz) {
sendKeyEvent(KeyEvent.KEYCODE_Z, v, event);
} else if (id == R.id.btnx) {
sendKeyEvent(KeyEvent.KEYCODE_X, v, event);
} else if (id == R.id.btnc) {
sendKeyEvent(KeyEvent.KEYCODE_C, v, event);
} else if (id == R.id.btnv) {
sendKeyEvent(KeyEvent.KEYCODE_V, v, event);
} else if (id == R.id.btnb) {
sendKeyEvent(KeyEvent.KEYCODE_B, v, event);
} else if (id == R.id.btnn) {
sendKeyEvent(KeyEvent.KEYCODE_N, v, event);
} else if (id == R.id.btnm) {
sendKeyEvent(KeyEvent.KEYCODE_M, v, event);
} else {
return false;
}
return true;
}
/**
* 长按删除按钮
*
* @author EX-XIAOFANQING001
*/
class DeleteTask implements Runnable {
private boolean isFirstAction = true;
@Override
public void run() {
while (true) {
if (!isDelPress) {
break;
}
handler.sendEmptyMessage(SENDEVENT);
try {
if (isFirstAction) {
Thread.sleep(FIRST_DELETE_DELAYED_TIME);
isFirstAction = false;
} else {
Thread.sleep(SECOND_DELETE_DELAYED_TIME);
}
} catch (InterruptedException e) {
// ignore
}
}
}
}
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case SENDEVENT:
if (onKeyDownBtnListener != null) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
}
break;
default:
break;
}
}
;
};
public interface OnSwitchCharKeyBoardListener {
void onSwitchCharKeyBoard(int charKeyBoardType);
}
public interface OnKeyboardShowListener {
void onShow(int keyboardHeight);
}
public interface OnkeyboardDismissListener extends OnDismissListener {
}
public void setEditText(EditText editText) {
this.editText = editText;
}
public EditText getEditText() {
return editText;
}
public void setOnKeyboardShowListener(OnKeyboardShowListener listener) {
mKeyboardShowListener = listener;
}
public static boolean hasKitKat() {
return Build.VERSION.SDK_INT >= 19;
}
/**
* shift组合键输入大写字母或特殊字符
*
* @param keyCode
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
private void onCapitalKeyDownBtn(int keyCode) {
if (hasKitKat()) {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(SystemClock
.uptimeMillis(), SystemClock.uptimeMillis(),
KeyEvent.ACTION_DOWN, keyCode, 0, KeyEvent.META_SHIFT_ON,
KeyCharacterMap.VIRTUAL_KEYBOARD, KeyEvent.KEYCODE_A,
KeyEvent.FLAG_FROM_SYSTEM, InputDevice.SOURCE_KEYBOARD));
} else {
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_SHIFT_LEFT));
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(
KeyEvent.ACTION_DOWN, keyCode));
onKeyDownBtnListener.onKeyDownBtn(new KeyEvent(KeyEvent.ACTION_UP,
KeyEvent.KEYCODE_SHIFT_LEFT));
}
}
}