android 自定义车牌输入框,Android 自定义车牌输入框

public classLicensePlateView extendsRelativeLayout implementsView.OnClickListener {

privateEditText editText;privateTextView[] TextViews;privateActivity mActivity;privateView mNumView;privateView mProvinceView;private intcount= 0;private intupdateViewPosition;private static intITEM_VIEW_COUNT= 7;privateLayoutInflater mInflater;privateString inputContent;private booleanisUpdateView= false;//是否更新view内容privateStringBuffer stringBuffer= newStringBuffer();privateOnFrameTouchListener mTouchListener= newOnFrameTouchListener();private static final int[] VIEW_IDS= new int[]{

R.id.item_code_iv1,R.id.item_code_iv2,R.id.item_code_iv3,R.id.item_code_iv4,R.id.item_code_iv5,R.id.item_code_iv6,R.id.item_code_iv7,R.id.item_code_iv8};private static final int[] VIEW_PROVINCE_IDS= new int[]{

R.id.select_province_11_tv,R.id.select_province_12_tv,R.id.select_province_13_tv,R.id.select_province_14_tv,R.id.select_province_15_tv,R.id.select_province_16_tv,R.id.select_province_17_tv,R.id.select_province_18_tv,R.id.select_province_19_tv,R.id.select_province_110_tv,R.id.select_province_21_tv,R.id.select_province_22_tv,R.id.select_province_23_tv,R.id.select_province_24_tv,R.id.select_province_25_tv,R.id.select_province_26_tv,R.id.select_province_27_tv,R.id.select_province_28_tv,R.id.select_province_29_tv,R.id.select_province_210_tv,R.id.select_province_31_tv,R.id.select_province_32_tv,R.id.select_province_33_tv,R.id.select_province_34_tv,R.id.select_province_35_tv,R.id.select_province_35_tv,R.id.select_province_36_tv,R.id.select_province_37_tv,R.id.select_province_38_tv,R.id.select_province_41_tv,R.id.select_province_42_tv,R.id.select_province_43_tv,R.id.select_province_delete_tv};private static final int[] VIEW_NUM_IDS= new int[]{

R.id.select_num_100_tv,R.id.select_num_101_tv,R.id.select_num_102_tv,R.id.select_num_103_tv,R.id.select_num_104_tv,R.id.select_num_105_tv,R.id.select_num_106_tv,R.id.select_num_107_tv,R.id.select_num_108_tv,R.id.select_num_109_tv,R.id.select_num_200_tv,R.id.select_num_201_tv,R.id.select_num_202_tv,R.id.select_num_203_tv,R.id.select_num_204_tv,R.id.select_num_205_tv,R.id.select_num_206_tv,R.id.select_num_207_tv,R.id.select_num_208_tv,R.id.select_num_209_tv,R.id.select_num_300_tv,R.id.select_num_301_tv,R.id.select_num_302_tv,R.id.select_num_303_tv,R.id.select_num_304_tv,R.id.select_num_305_tv,R.id.select_num_306_tv,R.id.select_num_307_tv,R.id.select_num_308_tv,R.id.select_num_309_tv,R.id.select_num_400_tv,R.id.select_num_401_tv,R.id.select_num_402_tv,R.id.select_num_403_tv,R.id.select_num_404_tv,R.id.select_num_405_tv,R.id.select_num_406_tv,R.id.select_num_delete_tv};publicLicensePlateView(Context context) {

this(context, null);}

publicLicensePlateView(Context context,AttributeSet attrs) {

this(context,attrs,0);}

publicLicensePlateView(Context context,AttributeSet attrs, intdefStyleAttr) {

super(context,attrs,defStyleAttr);mActivity= (Activity) context;TextViews= newTextView[8];View.inflate(context,R.layout.layout_license_plate_frame, this);inttextsLength = VIEW_IDS.length;for(inti = 0;i < textsLength;i++) {

//textview放进数组中,方便修改操作TextViews[i] = (TextView) findViewById(VIEW_IDS[i]);TextViews[i].setOnTouchListener(mTouchListener);}

editText= (EditText) findViewById(R.id.item_edittext);TextViews[0].setBackgroundResource(R.drawable.license_plate_first_view_blue);//第一个输入框默认设置点中效果editText.setCursorVisible(false);//将光标隐藏setListener();hideSoftInputMethod();}

private voidsetListener() {

editText.addTextChangedListener(newTextWatcher() {

@Overridepublic voidbeforeTextChanged(CharSequence charSequence, inti, inti1, inti2) {

}

@Overridepublic voidonTextChanged(CharSequence charSequence, inti, inti1, inti2) {

}

@Overridepublic voidafterTextChanged(Editable editable) {

//如果字符不为""时才进行操作if(!editable.toString().equals("")) {

if(stringBuffer.length() > ITEM_VIEW_COUNT- 1) {

//当文本长度大于ITEM_VIEW_COUNT - 1位时EditText置空editText.setText("");return;} else{

//将文字添加到StringBuffer中stringBuffer.append(editable);//添加后将EditText置空 造成没有文字输入的错局editText.setText("");//记录stringBuffer的长度count= stringBuffer.length();inputContent= stringBuffer.toString();if(count== 1) {

mProvinceView.setVisibility(GONE);mNumView.setVisibility(VISIBLE);}

if(stringBuffer.length() == ITEM_VIEW_COUNT) {

//文字长度为sbLength则调用完成输入的监听if(inputListener!= null) {

inputListener.inputComplete(inputContent);mNumView.setVisibility(GONE);}

}

}

for(inti = 0;i < stringBuffer.length();i++) {

TextViews[i].setText(String.valueOf(inputContent.charAt(i)));TextViews[i].setTextColor(onSetTextColor(R.color.colorBlack));}

setTextViewsBackground(count);}

}

});editText.setOnKeyListener(newOnKeyListener() {

@Overridepublic booleanonKey(View v, intkeyCode,KeyEvent event) {

if(keyCode == KeyEvent.KEYCODE_DEL&& event.getAction() == KeyEvent.ACTION_DOWN) {

if(onKeyDelete()) {

return true;}

return true;}

return false;}

});}

/***设置框内字体颜色*/public intonSetTextColor(intresId) {

returnresId;}

public voidsetKeyboardContainerLayout(RelativeLayout layout) {

mInflater= LayoutInflater.from(mActivity);mProvinceView= mInflater.inflate(R.layout.layout_keyboard_province, null);RelativeLayout.LayoutParams rlParams = newRelativeLayout.LayoutParams(

ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);rlParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);mProvinceView.setLayoutParams(rlParams);mNumView= mInflater.inflate(R.layout.layout_keyboard_num, null);mNumView.setLayoutParams(rlParams);intprovinceLength = VIEW_PROVINCE_IDS.length;View view;for(inti = 0;i < provinceLength;i++) {

view = mProvinceView.findViewById(VIEW_PROVINCE_IDS[i]);view.setOnClickListener(this);}

intnumLength = VIEW_NUM_IDS.length;for(inti = 0;i < numLength;i++) {

view = mNumView.findViewById(VIEW_NUM_IDS[i]);view.setOnClickListener(this);}

layout.addView(mProvinceView);layout.addView(mNumView);mNumView.setVisibility(GONE);}

/***显示8个输入框*/public booleanshowLastView() {

TextViews[7].setVisibility(VISIBLE);ITEM_VIEW_COUNT= 8;if(!TextUtils.isEmpty(TextViews[6].getText())) {

mProvinceView.setVisibility(GONE);mNumView.setVisibility(VISIBLE);}

if(isUpdateView) {

setTextViewsBackground(updateViewPosition);} else{

setTextViewsBackground(count);}

return true;}

/***显示7个输入框*/public booleanhideLastView() {

TextViews[7].setVisibility(GONE);ITEM_VIEW_COUNT= 7;if(stringBuffer.length() == 8|| stringBuffer.length() == 7) {

TextViews[7].setText("");stringBuffer.delete(7,8);inputContent= stringBuffer.toString();count= stringBuffer.length();inputListener.inputComplete(inputContent);if(!isUpdateView) {

mNumView.setVisibility(GONE);}

}

if(isUpdateView) {

setTextViewsBackground(updateViewPosition);} else{

setTextViewsBackground(count);}

return false;}

private booleanonKeyDelete() {

if(count== 0) {

count= 7;return true;}

if(stringBuffer.length() > 0) {

//删除相应位置的字符stringBuffer.delete((count- 1),count);count--;if(count== 0) {

//切换回省份选择mProvinceView.setVisibility(VISIBLE);mNumView.setVisibility(GONE);}

inputContent= stringBuffer.toString();TextViews[stringBuffer.length()].setText("");setTextViewsBackground(count);//有删除就通知mangerinputListener.deleteContent();}

return false;}

/***清空输入内容*/public voidclearEditText() {

stringBuffer.delete(0,stringBuffer.length());inputContent= stringBuffer.toString();for(inti = 0;i < TextViews.length;i++) {

TextViews[i].setText("");TextViews[i].setBackgroundResource(R.drawable.license_plate_code_gray_bg);}

}

private@NonNullInputListener inputListener;public voidsetInputListener(InputListener inputListener) {

this.inputListener= inputListener;}

/***键盘的点击事件*/@Overridepublic voidonClick(View view) {

if(view instanceofTextView) {

TextView tv = (TextView) view;tv.setSelected(true);String text = tv.getText().toString();if(view.getId() == R.id.select_province_delete_tv|| view.getId() == R.id.select_num_delete_tv) {

inputListener.deleteContent();}

setEditContent(text);}

}

/***输入完成监听回调接口*/public interfaceInputListener {

/***@paramcontent当输入完成时的全部内容*/voidinputComplete(String content);/***删除操作*/voiddeleteContent();}

/***获取输入文本**@return*/publicString getEditContent() {

returninputContent;}

/***设置EditText的输入内容*根据isUpdateView判断修改/删除操作*/private voidsetEditContent(String content) {

if(!isUpdateView) {

if(!TextUtils.isEmpty(content)) {

editText.setText(content);} else{

onKeyDelete();setTextViewsEnable(true);}

} else{

if(!TextUtils.isEmpty(content)) {

stringBuffer.replace(updateViewPosition,updateViewPosition+ 1,content);isUpdateView= !isUpdateView;setTextViewsEnable(true);} else{

TextViews[updateViewPosition].setText(content);if(updateViewPosition+ 1== ITEM_VIEW_COUNT) {

isUpdateView= !isUpdateView;stringBuffer.delete(updateViewPosition,updateViewPosition+ 1);count--;}

inputListener.deleteContent();setTextViewsEnable(false);return;}

TextViews[updateViewPosition].setText(content);inputContent= stringBuffer.toString();count= stringBuffer.length();setTextViewsBackground(count);//切换数字输入mProvinceView.setVisibility(GONE);mNumView.setVisibility(VISIBLE);if(stringBuffer.length() == ITEM_VIEW_COUNT) {

//文字长度为sblength则调用完成输入的监听if(inputListener!= null) {

inputListener.inputComplete(inputContent);mNumView.setVisibility(GONE);}

}

}

}

/***显示输入框的TouchListener*/private classOnFrameTouchListener implementsOnTouchListener {

@Overridepublic booleanonTouch(View view,MotionEvent event) {

if(view instanceofTextView) {

TextView tv = (TextView) view;tv.setFocusable(true);String tvString = (String) tv.getText();if(TextUtils.isEmpty(tvString)) {

isUpdateView= false;return false;}

intviewId = tv.getId();for(inti = 0;i < stringBuffer.length();i++) {

if(viewId == VIEW_IDS[i]) {

updateViewPosition= i;if(i == 0) {

mProvinceView.setVisibility(VISIBLE);mNumView.setVisibility(GONE);} else{

mProvinceView.setVisibility(GONE);mNumView.setVisibility(VISIBLE);}

isUpdateView= true;setTextViewsBackground(i);}

}

}

return true;}

}

/***当修改选中的某个号码,其他数字不能被选中,防止只改变显示,造成数据错误*/private voidsetTextViewsEnable(booleanenabled) {

for(inti = 0;i < TextViews.length;i++) {

TextViews[i].setEnabled(enabled);}

}

private voidsetTextViewsBackground(intposition) {

//第一个框的样式if(position == 0) {

TextViews[0].setBackgroundResource(R.drawable.license_plate_first_view_blue);} else{

TextViews[0].setBackgroundResource(R.drawable.license_plate_first_view_all_gray);}

//从第二个开始,到倒数第二个//根据点击选中效果,设置两边的样式if(position < ITEM_VIEW_COUNT- 2&& position >= 1) {

for(inti = 1;i < ITEM_VIEW_COUNT- 2;i++) {

TextViews[i].setBackgroundResource(R.drawable.license_plate_view_right_gray);}

if(position == 1) {

TextViews[position - 1].setBackgroundResource(R.drawable.license_plate_first_view_gray);} else{

TextViews[position - 1].setBackgroundResource(R.drawable.license_plate_view_half_gray);}

TextViews[position].setBackgroundResource(R.drawable.license_plate_mid_view_blue);} else{

for(inti = 1;i < ITEM_VIEW_COUNT- 2;i++) {

TextViews[i].setBackgroundResource(R.drawable.license_plate_view_right_gray);}

}

//倒数第二个框的样式,根据选中的效果,设置前后两个框的样式if(position == ITEM_VIEW_COUNT- 2) {

TextViews[position].setBackgroundResource(R.drawable.license_plate_mid_view_blue);TextViews[position + 1].setBackgroundResource(R.drawable.license_plate_last_view_bg);TextViews[position - 1].setBackgroundResource(R.drawable.license_plate_view_half_gray);} else{

TextViews[ITEM_VIEW_COUNT- 2].setBackgroundResource(R.drawable.license_plate_mid_view_bg);}

//最后一个框的样式,根据选中的样式,前面一个样式需要改变if(position == ITEM_VIEW_COUNT- 1) {

TextViews[position].setBackgroundResource(R.drawable.license_plate_last_view_blue);TextViews[position - 1].setBackgroundResource(R.drawable.license_plate_view_half_gray);} else{

TextViews[ITEM_VIEW_COUNT- 1].setBackgroundResource(R.drawable.license_plate_last_view_bg);}

}

/***禁用系统软键盘*/public voidhideSoftInputMethod() {

mActivity.getWindow().setSoftInputMode(

WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);intcurrentVersion = android.os.Build.VERSION.SDK_INT;String methodName = null;if(currentVersion >= 16) {

// 4.2methodName = "setShowSoftInputOnFocus";} else if(currentVersion >= 14) {

// 4.0methodName = "setSoftInputShownOnFocus";}

if(methodName == null) {

editText.setInputType(InputType.TYPE_NULL);} else{

Classcls = EditText.class;Method setShowSoftInputOnFocus;try{

setShowSoftInputOnFocus = cls.getMethod(methodName,boolean.class);setShowSoftInputOnFocus.setAccessible(true);setShowSoftInputOnFocus.invoke(editText, false);} catch(NoSuchMethodException e) {

editText.setInputType(InputType.TYPE_NULL);e.printStackTrace();} catch(IllegalAccessException e) {

e.printStackTrace();} catch(IllegalArgumentException e) {

e.printStackTrace();} catch(InvocationTargetException e) {

e.printStackTrace();}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值