直接复制过去就能用
public class SpaceEditText extends AppCompatEditText {
//上次输入框中的内容
private String lastString;
//光标的位置
private int selectPosition;
//输入框内容改变监听
private TextChangeListener listener;
public SpaceEditText(Context context) {
super(context);
initView();
}
public SpaceEditText(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public SpaceEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView();
}
private void initView() {
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (start == 0 && count > 1 && SpaceEditText.this.getSelectionStart() == 0) {
return;
}
String textTrim = getTextTrim(SpaceEditText.this);
if (TextUtils.isEmpty(textTrim)) {
return;
}
if (before > 0 && count == 0) {
selectPosition = start;
if (TextUtils.isEmpty(lastString)) {
return;
}
if (textTrim.equals(lastString.replaceAll(" ", ""))) {
StringBuilder stringBuilder = new StringBuilder(lastString);
stringBuilder.deleteCharAt(start - 1);
selectPosition = start - 1;
SpaceEditText.this.setText(stringBuilder.toString());
}
} else {
if ((start + count) % 5 == 0) {
selectPosition = start + count + 1;
} else {
selectPosition = start + count;
}
}
}
@Override
public void afterTextChanged(Editable s) {
String etContent = getText(SpaceEditText.this);
if (TextUtils.isEmpty(etContent)) {
if (listener != null) {
listener.textChange("");
}
return;
}
String newContent = addSpaceByCredit(etContent);
lastString = newContent;
if (!newContent.equals(etContent)) {
SpaceEditText.this.setText(newContent);
SpaceEditText.this.setSelection(selectPosition > newContent.length() ? newContent.length() : selectPosition);
}
if (listener != null) {
listener.textChange(newContent);
}
}
});
}
public interface TextChangeListener {
void textChange(String text);
}
public void setTextChangeListener(TextChangeListener listener) {
this.listener = listener;
}
private String addSpaceByCredit(String content) {
if (TextUtils.isEmpty(content)) {
return "";
}
content = content.replaceAll(" ", "");
if (TextUtils.isEmpty(content)) {
return "";
}
StringBuilder newString = new StringBuilder();
for (int i = 1; i <= content.length(); i++) {
if (i % 4 == 0 && i != content.length()) {
newString.append(content.charAt(i - 1) + " ");
} else {
newString.append(content.charAt(i - 1));
}
}
return newString.toString();
}
private String getTextTrim(EditText text) {
return text.getText().toString().replaceAll(" ", "");
}
private String getText(EditText text) {
return text.getText().toString();
}
}