Android 验证码输入(底部带横线)
先看一下效果图

1.先自定义一个类 ,继承RelativeLayout
public class VerifyCodeView extends RelativeLayout {private EditText editText;private TextView[] textViews;private static int MAX = 6;private String inputContent;public VerifyCodeView(Context context) {this(context, null);}public VerifyCodeView(Context context, AttributeSet attrs) {this(context, attrs, 0);}public VerifyCodeView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);View inflate = View.inflate(context, R.layout.view_verify_code, this);textViews = new TextView[MAX];textViews[0] = (TextView)inflate.findViewById(R.id.tv_0);textViews[1] = (TextView) inflate.findViewById(R.id.tv_1);textViews[2] = (TextView) inflate.findViewById(R.id.tv_2);textViews[3] = (TextView) inflate.findViewById(R.id.tv_3);textViews[4] = (TextView) inflate.findViewById(R.id.tv_4);textViews[5] = (TextView) inflate.findViewById(R.id.tv_5);editText = (EditText) inflate.findViewById(R.id.edit_text_view);editText.setCursorVisible(false);//隐藏光标setEditTextListener();}private void setEditTextListener() {editText.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void afterTextChanged(Editable editable) {inputContent = editText.getText().toString();if (inputCompleteListener != null) {if (inputContent.length() >= MAX) {inputCompleteListener.inputComplete();} else {inputCompleteListener.invalidContent();}}for (int i = 0; i < MAX; i++) {if (i < inputContent.length()) {textViews[i].setText(String.valueOf(inputContent.charAt(i)));} else {textViews[i].setText("");}}}});}private InputCompleteListener inputCompleteListener;public void setInputCompleteListener(InputCompleteListener inputCompleteListener) {this.inputCompleteListener = inputCompleteListener;}public interface InputCompleteListener {void inputComplete();void invalidContent();}public String getEditContent() {return inputContent;}
}
2.view_verify_code 布局
3.再创建一个输入框的类 MyEditText
public class MyEditText extends AppCompatEditText {private long lastTime = 0;public MyEditText(Context context) {super(context);}public MyEditText(Context context, AttributeSet attrs) {super(context, attrs);}public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onSelectionChanged(int selStart, int selEnd) {super.onSelectionChanged(selStart, selEnd);this.setSelection(this.getText().length());}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:long currentTime = System.currentTimeMillis();if (currentTime - lastTime < 500) {lastTime = currentTime;return true;} else {lastTime = currentTime;}break;}return super.onTouchEvent(event);}
}
4.在Style中加入这些样式 直接粘贴进去
5.在colors中添加这些 直接粘贴进去
#AAB2CB #00000000 #ddd
6.mainactivity中的布局
7.MainActivity的代码
public class MainActivity extends AppCompatActivity {private VerifyCodeView verifyCodeView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);verifyCodeView = findViewById(R.id.verify_code_view);verifyCodeView.setInputCompleteListener(new VerifyCodeView.InputCompleteListener() {@Overridepublic void inputComplete() {Toast.makeText(MainActivity.this, ""+ verifyCodeView.getEditContent(), Toast.LENGTH_SHORT).show();}@Overridepublic void invalidContent() {}});}
}
大功告成 !!!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
