android.text.Selection#setSelection ( )源码实例Demo

下面列出了android.text.Selection#setSelection ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: TurboLauncher   文件: Folder.java
public void doneEditingFolderName(boolean commit) {
    mFolderName.setHint(sHintText);
    // Convert to a string here to ensure that no other state associated with the text field
    // gets saved.
    String newTitle = mFolderName.getText().toString();
    if (!SettingsProvider.getBoolean(mLauncher,
            SettingsProvider.SETTINGS_UI_HOMESCREEN_HIDE_ICON_LABELS,
            R.bool.preferences_interface_homescreen_hide_icon_labels_default)) {
        mInfo.setTitle(newTitle);
    }
    LauncherModel.updateItemInDatabase(mLauncher, mInfo);

    if (commit) {
        sendCustomAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED,
                String.format(getContext().getString(R.string.folder_renamed), newTitle));
    }
    // In order to clear the focus from the text field, we set the focus on ourself. This
    // ensures that every time the field is clicked, focus is gained, giving reliable behavior.
    requestFocus();

    Selection.setSelection((Spannable) mFolderName.getText(), 0, 0);
    mIsEditingName = false;
}
 
源代码2 项目: android_9.0.0_r45   文件: MultiTapKeyListener.java
public void run() {
    Spannable buf = mBuffer;

    if (buf != null) {
        int st = Selection.getSelectionStart(buf);
        int en = Selection.getSelectionEnd(buf);

        int start = buf.getSpanStart(TextKeyListener.ACTIVE);
        int end = buf.getSpanEnd(TextKeyListener.ACTIVE);

        if (st == start && en == end) {
            Selection.setSelection(buf, Selection.getSelectionEnd(buf));
        }

        buf.removeSpan(Timeout.this);
    }
}
 
源代码3 项目: ShaderEditor   文件: UndoRedo.java
public void undo() {
	EditItem edit = editHistory.getPrevious();
	if (edit == null) {
		return;
	}

	Editable text = textView.getEditableText();
	int start = edit.start;
	int end = start + (edit.after != null ? edit.after.length() : 0);

	isUndoOrRedo = true;
	text.replace(start, end, edit.before);
	isUndoOrRedo = false;

	removeUnderlineSpans(text);

	Selection.setSelection(text, edit.before == null ? start
			: (start + edit.before.length()));
}
 
源代码4 项目: CallMeMaybe   文件: PhoneFormatter.java
private void formatPhoneNumberInput(final Editable input) {
  final int selection = Selection.getSelectionStart(buffer);
  boolean selectionPositionRemembered = false;

  asYouTypeFormatter.clear();
  String phoneNumberText = "";

  int offset = 0;
  final int length = input.length();
  while (offset < length) {
    final int codePoint = Character.codePointAt(input, offset);
    if (Character.isDigit(codePoint)) {
      final char digit = CodePoint.toDigitChar(codePoint);
      selectionPositionRemembered = selectionPositionRemembered || offset >= selection;
      phoneNumberText = asYouTypeFormatter.inputDigit(digit, !selectionPositionRemembered);
    }
    offset += Character.charCount(codePoint);
  }

  input.replace(0, input.length(), phoneNumberText);
  if (selection != -1) {
    Selection.setSelection(input,
        selectionPositionRemembered ? asYouTypeFormatter.getRememberedPosition() : phoneNumberText.length());
  }
}
 
源代码5 项目: Pix-Art-Messenger   文件: ListSelectionManager.java
private static void startSelection(TextView textView, int start, int end) {
    final CharSequence text = textView.getText();
    if (SUPPORTED && start >= 0 && end > start && textView.isTextSelectable() && text instanceof Spannable) {
        final Spannable spannable = (Spannable) text;
        start = Math.min(start, spannable.length());
        end = Math.min(end, spannable.length());
        Selection.setSelection(spannable, start, end);
        try {
            final Object editor = FIELD_EDITOR != null ? FIELD_EDITOR.get(textView) : textView;
            METHOD_START_SELECTION.invoke(editor);
        } catch (Exception e) {
        }
    }
}
 
源代码6 项目: tysq-android   文件: PersonResumeChangeFragment.java
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
    String content = etResume.getText().toString().trim();
    if (content.length() > 50) {
        String newStr = content.substring(0, 50);
        etResume.setText(newStr);
        Selection.setSelection(etResume.getText(), 50);
        content = newStr;
        ToastUtils.show(getString(R.string.resume_change_num_max));
    }
    tvNum.setText("" + content.length());
}
 
源代码7 项目: FormatEditText   文件: FormattedEditText.java
@Override
public void onRestoreInstanceState(Parcelable state) {
    if (!(state instanceof SavedState)) {
        super.onRestoreInstanceState(state);
        return;
    }
    SavedState savedState = (SavedState) state;
    mMode = savedState.mMode;
    mPlaceholder = savedState.mPlaceholder;
    mEmptyPlaceholder = savedState.mEmptyPlaceholder;
    mMark = savedState.mMark;
    mPlaceholders = savedState.mPlaceholders;
    mHintText = savedState.mHintText;
    mFormatStyle = savedState.mFormatStyle;
    mShowHintWhileEmpty = savedState.mShowHintWhileEmpty;
    mHintColor = savedState.mHintColor;
    if (mMode == MODE_SIMPLE) {
        parseSimplePlaceholders();
    } else if (mMode == MODE_COMPLEX) {
        parseComplexPlaceholders();
    }
    if (savedState.mRealText != null) {
        mRestoring = true;
        super.onRestoreInstanceState(savedState.getSuperState());
        mRestoring = false;
        mFilterRestoreTextChangeEvent = true;
        setText(savedState.mRealText);
        mFilterRestoreTextChangeEvent = false;
        Editable text = getText();
        Selection.setSelection(
                text,
                Math.min(savedState.mSelectionStart, text.length()),
                Math.min(savedState.mSelectionEnd, text.length()));
    } else {
        super.onRestoreInstanceState(savedState.getSuperState());
    }
}
 
源代码8 项目: material   文件: ContactEditText.java
@Override
public void onClick(View v) {
    int position = (Integer)v.getTag();
    if(position == 0)
        removeSpan(mSelectedSpan);
    else
        replaceSpan(mSelectedSpan, (Recipient)mReplacementAdapter.getItem(position));

    Selection.setSelection(getText(), getText().length());

    dismissReplacementPopup();
}
 
源代码9 项目: Spyglass   文件: MentionsEditText.java
@Override
@NonNull
public Editable newEditable(@NonNull CharSequence source) {
    MentionsEditable text = new MentionsEditable(source);
    Selection.setSelection(text, 0);
    return text;
}
 
源代码10 项目: FormattEditText   文件: MaskedEditText.java
private void formatMask(@NonNull Editable value) {
	InputFilter[] inputFilters = value.getFilters();
	value.setFilters(new InputFilter[0]);

	int indexInMask = 0;
	int indexInText = 0;
	int maskLength = 0;
	int inputLength = 0;
	boolean treatNextCharAsLiteral = false;
	boolean maskIsNotNumeric = false;

	Object selection = new Object();
	value.setSpan(selection, Selection.getSelectionStart(value), Selection.getSelectionEnd(value), Spanned.SPAN_MARK_MARK);

	while (indexInMask < mask.length()) {
		char charInMask = mask.charAt(indexInMask);
		if (!treatNextCharAsLiteral && isMaskChar(charInMask)) {
			// Found mask character, try to parse text
			maskIsNotNumeric |= charInMask != NUMBER_MASK;
			if (indexInText >= value.length()) {
				// Add trailing placeholders
				value.insert(indexInText, placeholder);
				value.setSpan(new PlaceholderSpan(), indexInText, indexInText + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
				++indexInText;
				++inputLength;
				++maskLength;
				++indexInMask;
			} else if (!matchMask(charInMask, value.charAt(indexInText))) {
				// Skip bad character in text
				value.delete(indexInText, indexInText + 1);
			} else {
				// Character in text is acceptable, go to next character in mask
				++indexInText;
				++inputLength;
				++maskLength;
				++indexInMask;
			}
		} else if (!treatNextCharAsLiteral && charInMask == ESCAPE_CHAR) {
			// Next character in mask must be escaped
			treatNextCharAsLiteral = true;
			++indexInMask;
		} else {
			// Found a literal or escaped character in mask
			value.insert(indexInText, String.valueOf(charInMask));
			value.setSpan(new LiteralSpan(), indexInText, indexInText + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
			treatNextCharAsLiteral = false;

			++indexInText;
			++maskLength;
			++indexInMask;
		}
	}

	while (value.length() > maskLength) {
		int pos = value.length() - 1;
		value.delete(pos, pos + 1);
	}

	Selection.setSelection(value, value.getSpanStart(selection), value.getSpanEnd(selection));
	value.removeSpan(selection);

	value.setFilters(inputFilters);

	int newInputType = inputLength > 0
			? (maskIsNotNumeric
			? InputType.TYPE_CLASS_TEXT
			: InputType.TYPE_CLASS_NUMBER)
			: 0;
	if (getInputType() != newInputType)
		setInputType(newInputType);
}
 
源代码11 项目: chat21-android-sdk   文件: TextViewLinkHandler.java
@Override
    public boolean onTouchEvent(TextView widget, Spannable buffer,
                                MotionEvent event) {
        int action = event.getAction();

        if (action == MotionEvent.ACTION_UP ||
                action == MotionEvent.ACTION_DOWN) {
            int x = (int) event.getX();
            int y = (int) event.getY();

            x -= widget.getTotalPaddingLeft();
            y -= widget.getTotalPaddingTop();

            x += widget.getScrollX();
            y += widget.getScrollY();

            Layout layout = widget.getLayout();
            int line = layout.getLineForVertical(y);
            int off = layout.getOffsetForHorizontal(line, x);

            ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

            if (link.length != 0) {
                if (action == MotionEvent.ACTION_UP) {
                    onLinkClick(link[0]);
//                    URLSpan[] linkUrlSpan = buffer.getSpans(off, off, URLSpan.class);
//                    if (linkUrlSpan[0].getURL().toString().startsWith(urlStartWith)) {
                        //onLinkClick(linkUrlSpan[0].getURL());
//                    }else {
//                        link[0].onClick(widget);
//                    }
                } else if (action == MotionEvent.ACTION_DOWN) {
                    Selection.setSelection(buffer,
                            buffer.getSpanStart(link[0]),
                            buffer.getSpanEnd(link[0]));
                }

                return true;
            } else {
                Selection.removeSelection(buffer);
            }
        }

        return super.onTouchEvent(widget, buffer, event);
    }
 
源代码12 项目: RichText   文件: LongClickableLinkMovementMethod.java
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
    int action = event.getAction();

    if (action == MotionEvent.ACTION_UP ||
            action == MotionEvent.ACTION_DOWN) {
        int x = (int) event.getX();
        int y = (int) event.getY();

        x -= widget.getTotalPaddingLeft();
        y -= widget.getTotalPaddingTop();

        x += widget.getScrollX();
        y += widget.getScrollY();

        Layout layout = widget.getLayout();
        int line = layout.getLineForVertical(y);
        int off = layout.getOffsetForHorizontal(line, x);

        LongClickableSpan[] link = buffer.getSpans(off, off, LongClickableSpan.class);

        if (link.length != 0) {
            long currTime = System.currentTimeMillis();
            LongClickableSpan l = link[0];
            int ls = buffer.getSpanStart(l);
            int le = buffer.getSpanEnd(l);
            // 判断点击的点是否在Image范围内
            ClickableImageSpan[] is = buffer.getSpans(ls, le, ClickableImageSpan.class);
            if (is.length > 0) {
                if (!is[0].clicked(x)) {
                    Selection.removeSelection(buffer);
                    return false;
                }
            } else if (off < layout.getOffsetToLeftOf(ls) || off > layout.getOffsetToLeftOf(le + 1)) {
                // 判断点击位置是否在链接范围内
                Selection.removeSelection(buffer);
                return false;
            }

            if (action == MotionEvent.ACTION_UP) {
                // 如果按下时间超过500毫秒,触发长按事件
                if (currTime - lastTime > MIN_INTERVAL) {
                    if (!l.onLongClick(widget)) {
                        // onLongClick返回false代表事件未处理,交由onClick处理
                        l.onClick(widget);
                    }
                } else {
                    l.onClick(widget);
                }
            } else {
                Selection.setSelection(buffer,
                        ls, le);
            }
            lastTime = currTime;
            return true;
        } else {
            Selection.removeSelection(buffer);
            return false;
        }
    }

    return super.onTouchEvent(widget, buffer, event);
}
 
源代码13 项目: Android-Architecture   文件: KeyboardUtil.java
/**
 * 设置输入框的光标到末尾
 */
public static void setEditTextSelectionToEnd(EditText editText) {
    Editable editable = editText.getEditableText();
    Selection.setSelection((Spannable) editable,
            editable.toString().length());
}
 
源代码14 项目: android_9.0.0_r45   文件: LinkMovementMethod.java
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer,
                            MotionEvent event) {
    int action = event.getAction();

    if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_DOWN) {
        int x = (int) event.getX();
        int y = (int) event.getY();

        x -= widget.getTotalPaddingLeft();
        y -= widget.getTotalPaddingTop();

        x += widget.getScrollX();
        y += widget.getScrollY();

        Layout layout = widget.getLayout();
        int line = layout.getLineForVertical(y);
        int off = layout.getOffsetForHorizontal(line, x);

        ClickableSpan[] links = buffer.getSpans(off, off, ClickableSpan.class);

        if (links.length != 0) {
            ClickableSpan link = links[0];
            if (action == MotionEvent.ACTION_UP) {
                if (link instanceof TextLinkSpan) {
                    ((TextLinkSpan) link).onClick(
                            widget, TextLinkSpan.INVOCATION_METHOD_TOUCH);
                } else {
                    link.onClick(widget);
                }
            } else if (action == MotionEvent.ACTION_DOWN) {
                if (widget.getContext().getApplicationInfo().targetSdkVersion
                        >= Build.VERSION_CODES.P) {
                    // Selection change will reposition the toolbar. Hide it for a few ms for a
                    // smoother transition.
                    widget.hideFloatingToolbar(HIDE_FLOATING_TOOLBAR_DELAY_MS);
                }
                Selection.setSelection(buffer,
                        buffer.getSpanStart(link),
                        buffer.getSpanEnd(link));
            }
            return true;
        } else {
            Selection.removeSelection(buffer);
        }
    }

    return super.onTouchEvent(widget, buffer, event);
}
 
源代码15 项目: mongol-library   文件: MongolTextView.java
public void setSelection(int index) {
    Selection.setSelection(mTextStorage, index);
}
 
源代码16 项目: android_9.0.0_r45   文件: EditText.java
/**
 * Convenience for {@link Selection#setSelection(Spannable, int, int)}.
 */
public void setSelection(int start, int stop) {
    Selection.setSelection(getText(), start, stop);
}
 
源代码17 项目: LaunchEnr   文件: Launcher.java
@Override
public void clearTypedText() {
    mDefaultKeySsb.clear();
    mDefaultKeySsb.clearSpans();
    Selection.setSelection(mDefaultKeySsb, 0);
}
 
源代码18 项目: PinView   文件: DefaultMovementMethod.java
@Override
public void initialize(TextView widget, Spannable text) {
    // It will mark the IMM as openable
    Selection.setSelection(text, 0);
}
 
源代码19 项目: materialup   文件: FabOverlapTextView.java
/**
 * This is why you don't implement your own TextView kids; you have to handle everything!
 */
@Override
public boolean onTouchEvent(MotionEvent event) {
    if (!(text instanceof Spanned)) return super.onTouchEvent(event);

    Spannable spannedText = (Spannable) text;

    boolean handled = false;
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        pressedSpan = getPressedSpan(spannedText, event);
        if (pressedSpan != null) {
            pressedSpan.setPressed(true);
            Selection.setSelection(spannedText, spannedText.getSpanStart(pressedSpan),
                    spannedText.getSpanEnd(pressedSpan));
            handled = true;
            postInvalidateOnAnimation();
        }
    } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
        TouchableUrlSpan touchedSpan = getPressedSpan(spannedText, event);
        if (pressedSpan != null && touchedSpan != pressedSpan) {
            pressedSpan.setPressed(false);
            pressedSpan = null;
            Selection.removeSelection(spannedText);
            postInvalidateOnAnimation();
        }
    } else if (event.getAction() == MotionEvent.ACTION_UP) {
        if (pressedSpan != null) {
            pressedSpan.setPressed(false);
            pressedSpan.onClick(this);
            handled = true;
            postInvalidateOnAnimation();
        }
        pressedSpan = null;
        Selection.removeSelection(spannedText);
    } else {
        if (pressedSpan != null) {
            pressedSpan.setPressed(false);
            handled = true;
            postInvalidateOnAnimation();
        }
        pressedSpan = null;
        Selection.removeSelection(spannedText);
    }
    return handled;
}
 
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
    int action = event.getAction();

    if (action == MotionEvent.ACTION_UP ||
            action == MotionEvent.ACTION_DOWN) {
        int x = (int) event.getX();
        int y = (int) event.getY();

        x -= widget.getTotalPaddingLeft();
        y -= widget.getTotalPaddingTop();

        x += widget.getScrollX();
        y += widget.getScrollY();

        Layout layout = widget.getLayout();
        int line = layout.getLineForVertical(y);
        int off = layout.getOffsetForHorizontal(line, x);

        ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);

        if (link.length != 0) {
            if (action == MotionEvent.ACTION_UP) {
                link[0].onClick(widget);
            } else if (action == MotionEvent.ACTION_DOWN) {
                Selection.setSelection(buffer,
                        buffer.getSpanStart(link[0]),
                        buffer.getSpanEnd(link[0]));
            }

            if (widget instanceof TextViewFixTouchConsume) {
                ((TextViewFixTouchConsume) widget).mlinkHit = true;
            }
            return true;
        } else {
            Selection.removeSelection(buffer);
            Touch.onTouchEvent(widget, buffer, event);
            return false;
        }
    }
    return Touch.onTouchEvent(widget, buffer, event);
}