|
1 | 1 | package com.variabletextinput.view; |
2 | 2 |
|
3 | 3 | import android.app.Activity; |
| 4 | +import android.content.ClipData; |
| 5 | +import android.content.ClipboardManager; |
4 | 6 | import android.content.Context; |
5 | 7 | import android.content.res.ColorStateList; |
6 | 8 | import android.graphics.Bitmap; |
|
33 | 35 | import com.variabletextinput.R; |
34 | 36 | import com.variabletextinput.bean.RichTextBean; |
35 | 37 | import com.variabletextinput.util.ActivityConst; |
36 | | -import com.variabletextinput.util.BitMapUtil; |
| 38 | +import com.variabletextinput.util.BitmapUtil; |
37 | 39 | import com.variabletextinput.widget.TextSpan; |
38 | 40 |
|
39 | 41 | import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; |
@@ -109,7 +111,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) { |
109 | 111 | ignoreNextLocalTextChange = false; |
110 | 112 | return; |
111 | 113 | } |
112 | | - if (editText.getText() != null && mSpanLength > -1) { |
| 114 | + if (before == 1 && count == 0 && editText.getText() != null && mSpanLength > -1) { |
113 | 115 | int length = mSpanLength; |
114 | 116 | mSpanLength = -1; |
115 | 117 | editText.getText().replace(start - length, start, ""); |
@@ -145,6 +147,43 @@ public void afterTextChanged(Editable s) { |
145 | 147 | } |
146 | 148 | } |
147 | 149 | }); |
| 150 | + editText.setOnMenuItemCallBack(new VariableEditText.OnMenuItemCallBack() { |
| 151 | + @Override |
| 152 | + public void onCut() { |
| 153 | + handleClipBoardData(); |
| 154 | + } |
| 155 | + |
| 156 | + @Override |
| 157 | + public void onCopy() { |
| 158 | + handleClipBoardData(); |
| 159 | + } |
| 160 | + |
| 161 | + @Override |
| 162 | + public void onPaste() { |
| 163 | + Log.e("onPaste", "执行onPaste方法"); |
| 164 | + } |
| 165 | + }); |
| 166 | + } |
| 167 | + |
| 168 | + //处理粘贴板数据 |
| 169 | + private void handleClipBoardData() { |
| 170 | + ClipboardManager clipboardManager = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE); |
| 171 | + if (clipboardManager != null && editText.getText() != null) { |
| 172 | + Editable editable = Editable.Factory.getInstance().newEditable(editText.getText().subSequence(editText.getSelectionStart(), editText.getSelectionEnd())); |
| 173 | + TextSpan[] spans = editable.getSpans(0, editable.length(), TextSpan.class); |
| 174 | + if (spans == null || spans.length == 0) return; |
| 175 | + for (TextSpan span : spans) { |
| 176 | + String text = span.getRichTextBean().tag; |
| 177 | + if (!TextUtils.isEmpty(span.getRichTextBean().name)) { |
| 178 | + text = span.getRichTextBean().tag + span.getRichTextBean().name; |
| 179 | + } |
| 180 | + int startIndex = editable.getSpanStart(span); |
| 181 | + int endIndex = editable.getSpanEnd(span); |
| 182 | + editable.replace(startIndex, endIndex, text); |
| 183 | + } |
| 184 | + ClipData clipData = ClipData.newPlainText("text", editable); |
| 185 | + clipboardManager.setPrimaryClip(clipData); |
| 186 | + } |
148 | 187 | } |
149 | 188 |
|
150 | 189 | public int pxToDp(int px) { |
@@ -371,7 +410,7 @@ private RichTextBean handleParams(ReadableMap map) { |
371 | 410 | } |
372 | 411 | if (map.hasKey(ActivityConst.EMOJI_TAG) && richTextBean.type == 1) { |
373 | 412 | richTextBean.tag = map.getString(ActivityConst.EMOJI_TAG); |
374 | | - richTextBean.content = String.format(mContext.getString(R.string.insert_emoji), richTextBean.tag.replaceAll("\\[|\\]", "")); |
| 413 | + richTextBean.content = richTextBean.tag; |
375 | 414 | } |
376 | 415 | if (map.hasKey(ActivityConst.NAME)) { |
377 | 416 | String name = map.getString(ActivityConst.NAME); |
@@ -415,7 +454,7 @@ private void insertMentions(RichTextBean richTextBean) { |
415 | 454 | if (editText.getText() != null) { |
416 | 455 | editText.getText().insert(startIndex, richTextBean.tag + richTextBean.name); |
417 | 456 | } |
418 | | - Bitmap bitmap = BitMapUtil.getTextBitmap(richTextBean.tag + richTextBean.name, editText.getTypeface(), editText.getTextSize(), richTextBean.color); |
| 457 | + Bitmap bitmap = BitmapUtil.getTextBitmap(richTextBean.tag + richTextBean.name, editText.getTypeface(), editText.getTextSize(), richTextBean.color); |
419 | 458 | TextSpan textSpan = new TextSpan(mContext, bitmap, richTextBean); |
420 | 459 | mSpannableString = SpannableString.valueOf(editText.getText()); |
421 | 460 | mSpannableString.setSpan(textSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); |
|
0 commit comments