下面列出了android.widget.EditText#getSelectionStart ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* " Search back from the cursor position till meeting '{' or ';'.
* " '{' means statement start, ';' means end of a previous statement.
*
* @return statement before cursor
* " Note: It's the base for parsing. And It's OK for most cases.
*/
@NonNull
private String getStatement(EditText editor) {
String lineBeforeCursor = getCurrentLine(editor);
if (lineBeforeCursor.matches("^\\s*(import|package)\\s+")) {
return lineBeforeCursor;
}
int oldCursor = editor.getSelectionStart();
int newCursor = oldCursor;
while (true) {
if (newCursor == 0) break;
char c = editor.getText().charAt(newCursor);
if (c == '{' || c == '}' || c == ';') {
newCursor++;
break;
}
newCursor--;
}
String statement = editor.getText().subSequence(newCursor, oldCursor).toString();
return mergeLine(statement);
}
@Override
public void sendText(@NotNull String txt) {
if (isEmpty(txt)) return;
View view = getWindow().getDecorView().findFocus();
if (view instanceof EditText) {
EditText editText = (EditText) view;
int start = editText.getSelectionStart();
int end = editText.getSelectionEnd();
Editable edit = editText.getEditableText();//获取EditText的文字
if (start < 0 || start >= edit.length()) {
edit.append(txt);
} else {
edit.replace(start, end, txt);//光标所在位置插入文字
}
}
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
BaseAdapter adapter = (BaseAdapter)parent.getAdapter();
String emotion = (String)adapter.getItem(position);
if (StringUtil.isEmpty(emotion)) {
return;
}
EditText etText = (EditText)((Activity)context).findViewById(R.id.etText);
int currentPos = 0;
if (etText != null) {
currentPos = etText.getSelectionStart();
etText.getText().insert(currentPos, emotion);
}
}
private void onBackPress(EditText editText) {
int selection = editText.getSelectionStart();
if (selection == 0) {
int viewIndex = allLayout.indexOfChild(editText);
View v = allLayout.getChildAt(viewIndex - 1);
if (v != null) {
if (v instanceof EditText) {
if ((int) v.getTag() != 1) {
String s1 = editText.getText().toString();
EditText q = (EditText) v;
String s2 = q.getText().toString();
allLayout.removeView(editText);
q.setText(s1 + s2);
q.requestFocus();
q.setSelection(s2.length(), s2.length());
lastEditText = q;
}
} else if (v instanceof ImageView) {
allLayout.removeView(v);
}
}
}
}
public static void addQuote(@NonNull EditText editText) {
String source = editText.getText().toString();
int selectionStart = editText.getSelectionStart();
int selectionEnd = editText.getSelectionEnd();
String substring = source.substring(selectionStart, selectionEnd);
String result;
if (hasNewLine(source, selectionStart)) {
result = "> " + substring;
} else {
result = "\n> " + substring;
}
editText.getText().replace(selectionStart, selectionEnd, result);
editText.setSelection(result.length() + selectionStart);
}
/**
* 修改加粗斜体样式
*/
public void boldItalic(EditText lastFocusEdit) {
Editable editable = lastFocusEdit.getEditableText();
int start = lastFocusEdit.getSelectionStart();
int end = lastFocusEdit.getSelectionEnd();
HyperLogUtils.i("boldItalic select Start:" + start + " end: " + end);
if (checkNormalStyle(start, end)) {
return;
}
new BoldItalicStyle().applyStyle(editable, start, end);
}
/**
* 修改斜体样式
*/
public void italic(EditText lastFocusEdit) {
Editable editable = lastFocusEdit.getEditableText();
int start = lastFocusEdit.getSelectionStart();
int end = lastFocusEdit.getSelectionEnd();
HyperLogUtils.i("italic select Start:" + start + " end: " + end);
if (checkNormalStyle(start, end)) {
return;
}
new ItalicStyle().applyStyle(editable, start, end);
}
private void setPwdState(ImageView imageView,
EditText editText,
boolean isHidePwd) {
int start = editText.getSelectionStart();
if (isHidePwd) {
imageView.setImageDrawable(hidePwdDrawable);
editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
} else {
imageView.setImageDrawable(showPwdDrawable);
editText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
}
editText.setSelection(start);
}
public final void formatSelectedText(EditText commentView, int what) {
int start = commentView.getSelectionStart();
int end = commentView.getSelectionEnd();
if (start == -1 || end == -1) {
return;
}
FormatResult result = formatSelectedText(commentView.getText(), what, start, end);
if (result != null) {
commentView.setSelection(result.start, result.end);
}
}
@Override
public void onFaceItemClick(FacePanelView view, String face, int faceId) {
View focusView = getCurrentFocus();
if (focusView != null && focusView instanceof EditText) {
EditText editText = (EditText) focusView;
int index = editText.getSelectionStart();
if (FacePanelView.KEY_DELETE.equals(face)) {
//发送删除事件
if (index > 0) {
editText.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
}
} else {
face = "{:" + face + ":}";
int size = SizeUtils.dp2px(20);
Drawable drawable = getResources().getDrawable(faceId);
drawable.setBounds(0, 0, size, size);
ImageSpan imageSpan = new ImageSpan(drawable, ALIGN_BOTTOM);
SpannableString spannableString = new SpannableString(face);
spannableString.setSpan(imageSpan, 0, face.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
if (index < 0 || index >= editText.getText().length()) {
editText.getEditableText().append(spannableString);
} else {
editText.getEditableText().insert(index, spannableString);
}
editText.setSelection(index + face.length());
}
}
}
/**
* 修改删除线样式
*/
public void strikeThrough(EditText lastFocusEdit) {
Editable editable = lastFocusEdit.getEditableText();
int start = lastFocusEdit.getSelectionStart();
int end = lastFocusEdit.getSelectionEnd();
HyperLogUtils.i("strikeThrough select Start:" + start + " end: " + end);
if (checkNormalStyle(start, end)) {
return;
}
new StrikeThroughStyle().applyStyle(editable, start, end);
}
private void quotePost(String raw) {
final EditText et = mContentET;
Editable editable = et.getText();
int start = et.getSelectionStart();
editable.insert(start, String.format(QUOTE_POST, mUsername, mPostNum, mTopic.id, mPostRaw));
}
private void markdownCode() {
final EditText et = mContentET;
Editable editable = et.getText();
int start = et.getSelectionStart();
if (et.hasSelection()) {
int end = et.getSelectionEnd();
editable.insert(end, CODE);
editable.insert(start, CODE);
et.setSelection(start + 1, end + 1);
} else {
editable.insert(start, CODE2);
et.setSelection(start + 1);
}
}
public EditTextSelectionState(@NonNull EditText editText) {
mEditText = editText;
mFocused = editText.hasFocus();
int selectionStart = editText.getSelectionStart();
int selectionEnd = editText.getSelectionEnd();
if (selectionStart > selectionEnd && selectionStart != -1 && selectionEnd != -1) {
mSelectionStart = selectionEnd;
mSelectionEnd = selectionStart;
} else {
mSelectionStart = selectionStart;
mSelectionEnd = selectionEnd;
}
}
public static void addHeader(@NonNull EditText editText, int level) {
String source = editText.getText().toString();
int selectionStart = editText.getSelectionStart();
int selectionEnd = editText.getSelectionEnd();
StringBuilder result = new StringBuilder();
String substring = source.substring(selectionStart, selectionEnd);
if (!hasNewLine(source, selectionStart))
result.append("\n");
IntStream.range(0, level).forEach(integer -> result.append("#"));
result.append(" ").append(substring);
editText.getText().replace(selectionStart, selectionEnd, result.toString());
editText.setSelection(selectionStart + result.length());
}
/**
* 修改加粗样式
*/
public void bold(EditText lastFocusEdit) {
//获取editable对象
Editable editable = lastFocusEdit.getEditableText();
//获取当前选中的起始位置
int start = lastFocusEdit.getSelectionStart();
//获取当前选中的末尾位置
int end = lastFocusEdit.getSelectionEnd();
HyperLogUtils.i("bold select Start:" + start + " end: " + end);
if (checkNormalStyle(start, end)) {
return;
}
new BoldStyle().applyStyle(editable, start, end);
}
public static EmoticonClickListener getCommonEmoticonClickListener(final EditText editText) {
return new EmoticonClickListener() {
@Override
public void onEmoticonClick(Object o, int actionType, boolean isDelBtn) {
if (isDelBtn) {
SimpleCommonUtils.delClick(editText);
} else {
if (o == null) {
return;
}
if (actionType == Constants.EMOTICON_CLICK_TEXT) {
String content = null;
if (o instanceof EmojiBean) {
content = ((EmojiBean) o).emoji;
} else if (o instanceof EmoticonEntity) {
content = ((EmoticonEntity) o).getContent();
}
if (TextUtils.isEmpty(content)) {
return;
}
int index = editText.getSelectionStart();
Editable editable = editText.getText();
editable.insert(index, content);
}
}
}
};
}
@OnClick(R.id.backspace)
void backspace() {
if (mFocusGrabber.isFocused()) {
mEditFieldsLayout.focusSearch(mFocusGrabber, View.FOCUS_LEFT).requestFocus();
}
EditText field = getFocusedField();
if (field == null)
return;
int at = field.getSelectionStart();
if (at == 0) {
// At the beginning of current field, so move focus
// to the preceding field
View prev = field.focusSearch(View.FOCUS_LEFT);
if (null == prev) {
// Reached the beginning of the hours field
return;
}
if (prev.requestFocus()) {
if (prev instanceof EditText) {
// Always move the cursor to the end when moving focus back
((EditText) prev).setSelection(FIELD_LENGTH);
}
// Recursively backspace on the newly focused field
backspace();
}
} else {
field.getText().replace(at - 1, at, "0");
field.setSelection(at - 1);
// updateStartButtonVisibility();
}
}
private int getEditTextCursorIndex(EditText mEditText) {
return mEditText.getSelectionStart();
}
public Selection(EditText editor) {
this(editor.getSelectionStart(), editor.getSelectionEnd());
}