android.text.Editable#replace ( )源码实例Demo

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

源代码1 项目: TokenAutoComplete   文件: TokenCompleteTextView.java
/**
 * A String of text that is shown before all the tokens inside the EditText
 * (Think "To: " in an email address field. I would advise against this: use a label and a hint.
 *
 * @param p String with the hint
 */
public void setPrefix(CharSequence p) {
    //Have to clear and set the actual text before saving the prefix to avoid the prefix filter
    CharSequence prevPrefix = prefix;
    prefix = p;
    Editable text = getText();
    if (text != null) {
        internalEditInProgress = true;
        if (prevPrefix != null) {
            text.replace(0, prevPrefix.length(), p);
        } else {
            text.insert(0, p);
        }
        internalEditInProgress = false;
    }
    //prefix = p;

    updateHint();
}
 
源代码2 项目: decoro   文件: FormatWatcher.java
public void refreshMask(@Nullable final CharSequence initialValue) {
    final boolean initial = this.mask == null;

    this.mask = createMask();
    checkMask();

    final boolean initiationNeeded = initialValue != null;
    diffMeasures = new DiffMeasures();
    if (initiationNeeded) {
        diffMeasures.setCursorPosition(mask.insertFront(initialValue));
    }

    if ((!initial || initWithMask || initiationNeeded) && isInstalled()) {
        selfEdit = true;
        final String formattedInitialValue = mask.toString();
        if (textView instanceof EditText) {
            final Editable editable = (Editable) textView.getText();
            editable.replace(0, editable.length(), formattedInitialValue, 0, formattedInitialValue.length());
        } else {
            textView.setText(formattedInitialValue);
        }
        setSelection(mask.getInitialInputPosition());
        selfEdit = false;
    }
}
 
public void undo() {
    EditItem edit = mEditHistory.getPrevious();
    if (edit == null) {
        return;
    }

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

    mIsUndoOrRedo = true;
    editable.replace(start, end, edit.before);
    mIsUndoOrRedo = false;

    for (Object o : editable.getSpans(0, editable.length(), UnderlineSpan.class)) {
        editable.removeSpan(o);
    }

    Selection.setSelection(editable, edit.before == null ? start : (start + edit.before.length()));
}
 
源代码4 项目: android-discourse   文件: EditorFragment.java
private void insertMarkdownPicture(String des, String url) {
    final EditText et = mContentET;
    Editable editable = et.getText();
    int start = et.getSelectionStart();
    int desL = des.length();
    int sbL = 1;
    // 当弹出对话框的时候, 文本的选择状态会消失。
    if (mUploadSelection.isEmpty()) {
        editable.insert(start, String.format(MARKDOWN_IMG, des, url));
    } else {
        start = mUploadSelection.start;
        int end = mUploadSelection.end;
        editable.replace(start, end, String.format(MARKDOWN_IMG, des, url));
        // editable.insert(start, SB);
        // editable.insert(start + desL + sbL, SB2);
        // editable.insert(start + desL + sbL + sbL, "(" + url + ")");
        et.setSelection(start + sbL, start + sbL + desL);
    }
}
 
源代码5 项目: mua   文件: UndoRedoHelper.java
/**
 * Perform redo.
 */
public void redo() {
    EditItem edit = mEditHistory.getNext();
    if (edit == null) {
        return;
    }

    Editable text = mTextView.getEditableText();
    int start = edit.mmStart;
    int end = start + (edit.mmBefore != null ? edit.mmBefore.length() : 0);

    mIsUndoOrRedo = true;
    text.replace(start, end, edit.mmAfter);
    mIsUndoOrRedo = false;

    // This will get rid of underlines inserted when editor tries to come
    // up with a suggestion.
    for (Object o : text.getSpans(0, text.length(), UnderlineSpan.class)) {
        text.removeSpan(o);
    }

    Selection.setSelection(text, edit.mmAfter == null ? start
            : (start + edit.mmAfter.length()));
}
 
源代码6 项目: JotaTextEditor   文件: Main.java
public void onSearchFinished(ArrayList<Record> data) {
    mSearchResult = null;

    Editable text = mEditor.getEditableText();
    CharSequence replaceword = mReplaceWord;
    mChangeCancel = true;

    if (data.size() > 100) {
        mEditor.enableUndo(false);
    }
    for (int i = data.size() - 1; i >= 0; i--) {
        Record record = data.get(i);
        text.replace(record.start, record.end, replaceword);
    }
    mChangeCancel = false;
    onChanged();
    mEditor.enableUndo(true);
}
 
源代码7 项目: ChipsLibrary   文件: RecipientEditTextView.java
private void handleEdit(final int start,final int end)
{
if(start==-1||end==-1)
  {
  // This chip no longer exists in the field.
  dismissDropDown();
  return;
  }
// This is in the middle of a chip, so select out the whole chip
// and commit it.
final Editable editable=getText();
setSelection(end);
final String text=getText().toString().substring(start,end);
if(!TextUtils.isEmpty(text))
  {
  final RecipientEntry entry=RecipientEntry.constructFakeEntry(text,isValid(text));
  QwertyKeyListener.markAsReplaced(editable,start,end,"");
  final CharSequence chipText=createChip(entry,false);
  final int selEnd=getSelectionEnd();
  if(chipText!=null&&start>-1&&selEnd>-1)
    editable.replace(start,selEnd,chipText);
  }
dismissDropDown();
}
 
源代码8 项目: turbo-editor   文件: Editor.java
/**
 * Perform undo.
 */
public void undo() {
    EditItem edit = mEditHistory.getPrevious();
    if (edit == null) {
        return;
    }

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

    mIsUndoOrRedo = true;
    text.replace(start, end, edit.mmBefore);
    mIsUndoOrRedo = false;

    // This will get rid of underlines inserted when editor tries to come
    // up with a suggestion.
    for (Object o : text.getSpans(0,
            text.length(), UnderlineSpan.class)) {
        text.removeSpan(o);
    }

    Selection.setSelection(text,
            edit.mmBefore == null ? start
                    : (start + edit.mmBefore.length()));
}
 
源代码9 项目: material   文件: ContactEditText.java
private void replaceSpan(RecipientSpan span, Recipient newRecipient){
    Editable text = getText();
    int start = text.getSpanStart(span);
    int end = text.getSpanEnd(span);
    String replace = newRecipient.number;
    text.replace(start, end - 2, newRecipient.number, 0, replace.length());
    span.setRecipient(newRecipient);
    text.setSpan(span, start, start + replace.length() + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
 
/**
 * <p>Performs the text completion by replacing the range from
 * {@link Tokenizer#findTokenStart} to {@link #getSelectionEnd} by the
 * the result of passing <code>text</code> through
 * {@link Tokenizer#terminateToken}.
 * In addition, the replaced region will be marked as an AutoText
 * substition so that if the user immediately presses DEL, the
 * completion will be undone.
 * Subclasses may override this method to do some different
 * insertion of the content into the edit box.</p>
 *
 * @param text the selected suggestion in the drop down list
 */
@Override
protected void replaceText(CharSequence text) {
    clearComposingText();

    int end = getSelectionEnd();
    int start = mTokenizer.findTokenStart(getText(), end);

    Editable editable = getText();
    String original = TextUtils.substring(editable, start, end);

    QwertyKeyListener.markAsReplaced(editable, start, end, original);
    editable.replace(start, end, mTokenizer.terminateToken(text));
}
 
源代码11 项目: Autocomplete   文件: MainActivity.java
private void setupMentionsAutocomplete() {
    EditText edit = findViewById(R.id.multi);
    float elevation = 6f;
    Drawable backgroundDrawable = new ColorDrawable(Color.WHITE);
    AutocompletePolicy policy = new CharPolicy('@'); // Look for @mentions
    AutocompletePresenter<User> presenter = new UserPresenter(this);
    AutocompleteCallback<User> callback = new AutocompleteCallback<User>() {
        @Override
        public boolean onPopupItemClicked(@NonNull Editable editable, @NonNull User item) {
            // Replace query text with the full name.
            int[] range = CharPolicy.getQueryRange(editable);
            if (range == null) return false;
            int start = range[0];
            int end = range[1];
            String replacement = item.getUsername();
            editable.replace(start, end, replacement);
            // This is better done with regexes and a TextWatcher, due to what happens when
            // the user clears some parts of the text. Up to you.
            editable.setSpan(new StyleSpan(Typeface.BOLD), start, start+replacement.length(),
                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
            return true;
        }
        public void onPopupVisibilityChanged(boolean shown) {}
    };

    mentionsAutocomplete = Autocomplete.<User>on(edit)
            .with(elevation)
            .with(backgroundDrawable)
            .with(policy)
            .with(presenter)
            .with(callback)
            .build();
}
 
源代码12 项目: NIM_Android_UIKit   文件: InputPanel.java
/**
 * *************** IEmojiSelectedListener ***************
 */
@Override
public void onEmojiSelected(String key) {
    Editable mEditable = messageEditText.getText();
    if (key.equals("/DEL")) {
        messageEditText.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
    } else {
        int start = messageEditText.getSelectionStart();
        int end = messageEditText.getSelectionEnd();
        start = (start < 0 ? 0 : start);
        end = (start < 0 ? 0 : end);
        mEditable.replace(start, end, key);
    }
}
 
源代码13 项目: JotaTextEditor   文件: Main.java
public void run() {
    if (mSharedString != null && mSharedString.length() > 0) {
        mProcNew.run();
        Editable text = mEditor.getText();
        text.replace(0, 0, mSharedString);
        mSharedString = null;
    }
}
 
/**
 * Check if current string was changed, so that editable should be also changed.
 *
 * @param s  the editable to change.
 * @param sb current string.
 */
private void checkIfReplaceIsNeeded(Editable s, StringBuilder sb) {
  lastText = sb.toString();
  if (!s.toString().equals(lastText)) {
    s.replace(0, s.length(), sb);
  }
}
 
源代码15 项目: PowerFileExplorer   文件: TextFrag.java
public void run() {
    if (mSharedString != null && mSharedString.length() > 0) {
        mProcNew.run();
        Editable text = mEditor.getText();
        text.replace(0, 0, mSharedString);
        mSharedString = null;
    }
}
 
源代码16 项目: Elephant   文件: MarkdownEditor.java
private void insertList(Editable e) {
    int selectionStart = mEditText.getSelectionStart();
    int selectionEnd = mEditText.getSelectionEnd();
    final String listTemplate = "- List Item";
    e.replace(selectionStart, selectionEnd, listTemplate);
    // start from "L", end to "m"
    mEditText.setSelection(selectionStart + 2, selectionStart + 11);
}
 
源代码17 项目: Elephant   文件: MarkdownEditor.java
private void insertHorizontalLine(Editable e) {
    int selectionStart = mEditText.getSelectionStart();
    int selectionEnd = mEditText.getSelectionEnd();
    final String titleTemplate = "---\n";
    e.replace(selectionStart, selectionEnd, titleTemplate);
    // start from "t", end to "e"
    mEditText.setSelection(selectionStart + 4, selectionStart + 4);
}
 
源代码18 项目: JotaTextEditor   文件: JotaTextKeyListener.java
@Override
public boolean onKeyDown(View view, Editable content, int keyCode, KeyEvent event) {
    boolean result = super.onKeyDown(view, content, keyCode, event);

    // auto indent
    if ( sAutoIndent && keyCode == KeyEvent.KEYCODE_ENTER ){

        int a = Selection.getSelectionStart(content);
        int b = Selection.getSelectionEnd(content);
        if ( a == b ){

            // search head of previous line
            int prev = a-2;
            while( prev >=0 && content.charAt(prev)!='\n' ){
                prev--;
            }
            prev ++;
            int pos = prev;
            while(  content.charAt(pos)==' ' || content.charAt(pos)=='\t' || content.charAt(pos)=='\u3000'){
                pos++;
            }
            int len = pos-prev;
            if ( len > 0  ){
                char [] dest = new char[len];
                content.getChars(prev, pos, dest, 0);

                content.replace(a,b, new String(dest) );
                Selection.setSelection(content, a+len);
            }
        }
    }
    if ( Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB ){
        if (keyCode == KEYCODE_FORWARD_DEL ) {
            if ( (event.getMetaState() & 512) == 0 ){       // workaround for Galaxy Note
                forwardDelete(view, content, keyCode, event);
                return true;
            }
        }
    }
    return result;
}
 
源代码19 项目: talk-android   文件: TextChipsEditView.java
/**
 * Create the more chip. The more chip is text that replaces any chips that
 * do not fit in the pre-defined available space when the
 * RecipientEditTextView loses focus.
 */
// Visible for testing.
/* package */ void createMoreChip() {
    if (mNoChips) {
        createMoreChipPlainText();
        return;
    }

    if (!mShouldShrink) {
        return;
    }
    ImageSpan[] tempMore = getSpannable().getSpans(0, getText().length(), MoreImageSpan.class);
    if (tempMore.length > 0) {
        getSpannable().removeSpan(tempMore[0]);
    }
    DrawableRecipientChip[] recipients = getSortedRecipients();

    if (recipients == null || recipients.length <= CHIP_LIMIT) {
        mMoreChip = null;
        return;
    }
    Spannable spannable = getSpannable();
    int numRecipients = recipients.length;
    int overage = numRecipients - CHIP_LIMIT;
    MoreImageSpan moreSpan = createMoreSpan(overage);
    mRemovedSpans = new ArrayList<DrawableRecipientChip>();
    int totalReplaceStart = 0;
    int totalReplaceEnd = 0;
    Editable text = getText();
    for (int i = numRecipients - overage; i < recipients.length; i++) {
        mRemovedSpans.add(recipients[i]);
        if (i == numRecipients - overage) {
            totalReplaceStart = spannable.getSpanStart(recipients[i]);
        }
        if (i == recipients.length - 1) {
            totalReplaceEnd = spannable.getSpanEnd(recipients[i]);
        }
        if (mTemporaryRecipients == null || !mTemporaryRecipients.contains(recipients[i])) {
            int spanStart = spannable.getSpanStart(recipients[i]);
            int spanEnd = spannable.getSpanEnd(recipients[i]);
            recipients[i].setOriginalText(text.toString().substring(spanStart, spanEnd));
        }
        spannable.removeSpan(recipients[i]);
    }
    if (totalReplaceEnd < text.length()) {
        totalReplaceEnd = text.length();
    }
    int end = Math.max(totalReplaceStart, totalReplaceEnd);
    int start = Math.min(totalReplaceStart, totalReplaceEnd);
    SpannableString chipText = new SpannableString(text.subSequence(start, end));
    chipText.setSpan(moreSpan, 0, chipText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    text.replace(start, end, chipText);
    mMoreChip = moreSpan;
    // If adding the +more chip goes over the limit, resize accordingly.
    if (!isPhoneQuery() && getLineCount() > mMaxLines) {
        setMaxLines(getLineCount());
    }
}
 
源代码20 项目: ChipsLibrary   文件: RecipientEditTextView.java
private void processReplacements(final List<DrawableRecipientChip> recipients,final List<DrawableRecipientChip> replacements)
{
if(replacements!=null&&replacements.size()>0)
  {
  final Runnable runnable=new Runnable()
    {
      @Override
      public void run()
        {
        final Editable text=new SpannableStringBuilder(getText());
        int i=0;
        for(final DrawableRecipientChip chip : recipients)
          {
          final DrawableRecipientChip replacement=replacements.get(i);
          if(replacement!=null)
            {
            final RecipientEntry oldEntry=chip.getEntry();
            final RecipientEntry newEntry=replacement.getEntry();
            final boolean isBetter=RecipientAlternatesAdapter.getBetterRecipient(oldEntry,newEntry)==newEntry;
            if(isBetter)
              {
              // Find the location of the chip in the text currently shown.
              final int start=text.getSpanStart(chip);
              if(start!=-1)
                {
                // Replacing the entirety of what the chip represented,
                // including the extra space dividing it from other chips.
                final int end=Math.min(text.getSpanEnd(chip)+1,text.length());
                text.removeSpan(chip);
                // Make sure we always have just 1 space at the end to
                // separate this chip from the next chip.
                final SpannableString displayText=new SpannableString(createAddressText(replacement.getEntry()).trim()+" ");
                displayText.setSpan(replacement,0,displayText.length()-1,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                // Replace the old text we found with with the new display
                // text, which now may also contain the display name of the
                // recipient.
                text.replace(start,end,displayText);
                replacement.setOriginalText(displayText.toString());
                replacements.set(i,null);
                recipients.set(i,replacement);
                }
              }
            }
          i++;
          }
        setText(text);
        }
    };
  if(Looper.myLooper()==Looper.getMainLooper())
    runnable.run();
  else mHandler.post(runnable);
  }
}