前不久由于项目的需要,要做一个自定义的软键盘,我也上网看了很多,都觉得很繁琐,所以想自己动手实现个。以备不时之需把。我选择了参考百度钱包的软键盘,看起来还不错:
下面一起来实现它:
1.写一个键盘控件,这个实现起来比较简单,就不多说了
public class SoftInputBoard extends RelativeLayout
implements View.OnClickListener{
private Scroller mScroller;
private int mScreenHeigh = 0;
private int mScreenWidth = 0;
private Boolean isMoving = false;
private int viewHeight = 0;
public boolean isShow = false;
public boolean mEnabled = true;
public boolean mOutsideTouchable = true;
private int mDuration = 800;
private boolean userIsLongPress = false;
@Override
public void onClick(View v) {
String value = "";
int id = v.getId();
if(id == R.id.tv0){
value = "0";
}else if(id == R.id.tv1){
value = "1";
}else if(id == R.id.tv2){
value = "2";
}else if(id == R.id.tv3){
value = "3";
}else if(id == R.id.tv4){
value = "4";
}else if(id == R.id.tv5){
value = "5";
}else if(id == R.id.tv6){
value = "6";
}else if(id == R.id.tv7){
value = "7";
}else if(id == R.id.tv8){
value = "8";
}else if(id == R.id.tv9){
value = "9";
}else if(id == R.id.iv_delete){
value = "delete";
}else if(id == R.id.tvx){
value = "X";
}
if(payListener != null){
payListener.chooseWay(value);
}
}
public interface ChoosePayWayListener{
void chooseWay(String value);
}
public ChoosePayWayListener payListener;
public void setOnChoosePayWayListener(ChoosePayWayListener payListener){
this.payListener = payListener;
}
private final static String TAG = "SoftInputView";
public SoftInputBoard(Context context) {
super(context);
init(context);
}
public SoftInputBoard(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public SoftInputBoard(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(Context context) {
setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
setFocusable(true);
mScroller = new Scroller(context);
mScreenHeigh = BaseTools.getWindowHeigh(context);
mScreenWidth = BaseTools.getWindowWidth(context);
this.setBackgroundColor(Color.argb(0, 0, 0, 0));
final View view = LayoutInflater.from(context).inflate(R.layout.view_soft_input, null);
TextView tv0 = (TextView)view.findViewById(R.id.tv0);
TextView tv1 = (TextView)view.findViewById(R.id.tv1);
TextView tv2 = (TextView)view.findViewById(R.id.tv2);
TextView tv3 = (TextView)view.findViewById(R.id.tv3);
TextView tv4 = (TextView)view.findViewById(R.id.tv4);
TextView tv5 = (TextView)view.findViewById(R.id.tv5);
TextView tv6 = (TextView)view.findViewById(R.id.tv6);
TextView tv7 = (TextView)view.findViewById(R.id.tv7);
TextView tv8 = (TextView)view.findViewById(R.id.tv8);
TextView tv9 = (TextView)view.findViewById(R.id.tv9);
TextView tvx = (TextView)view.findViewById(R.id.tvx);
final RelativeLayout ivDelete = (RelativeLayout)view.findViewById(R.id.iv_delete);
ivDelete.setClickable(true);
tv0.setOnClickListener(this);
tv1.setOnClickListener(this);
tv2.setOnClickListener(this);
tv3.setOnClickListener(this);
tv4.setOnClickListener(this);
tv5.setOnClickListener(this);
tv6.setOnClickListener(this);
tv7.setOnClickListener(this);
tv8.setOnClickListener(this);
tv9.setOnClickListener(this);
tvx.setOnClickListener(this);
ivDelete.setOnClickListener(this);
ivDelete.setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if(payListener != null){
payListener.chooseWay("xdelete");
}
return false;
}
});
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT);
addView(view, params);
this.setBackgroundColor(Color.argb(0, 0, 0, 0));
view.post(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
viewHeight = view.getHeight();
}
});
SoftInputBoard.this.scrollTo(0, mScreenHeigh);
ImageView btn_close = (ImageView)view.findViewById(R.id.btn_close);
btn_close.setOnClickListener(new OnClickList