11package com .variabletextinput .view ;
22
33import android .app .Activity ;
4+ import android .content .ClipData ;
5+ import android .content .ClipboardManager ;
46import android .content .Context ;
57import android .content .res .ColorStateList ;
68import android .graphics .Bitmap ;
3335import com .variabletextinput .R ;
3436import com .variabletextinput .bean .RichTextBean ;
3537import com .variabletextinput .util .ActivityConst ;
36- import com .variabletextinput .util .BitMapUtil ;
38+ import com .variabletextinput .util .BitmapUtil ;
3739import com .variabletextinput .widget .TextSpan ;
3840
3941import static android .view .ViewGroup .LayoutParams .MATCH_PARENT ;
@@ -109,7 +111,7 @@ public void onTextChanged(CharSequence s, int start, int before, int count) {
109111 ignoreNextLocalTextChange = false ;
110112 return ;
111113 }
112- if (editText .getText () != null && mSpanLength > -1 ) {
114+ if (before == 1 && count == 0 && editText .getText () != null && mSpanLength > -1 ) {
113115 int length = mSpanLength ;
114116 mSpanLength = -1 ;
115117 editText .getText ().replace (start - length , start , "" );
@@ -145,6 +147,43 @@ public void afterTextChanged(Editable s) {
145147 }
146148 }
147149 });
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+ }
148187 }
149188
150189 public int pxToDp (int px ) {
@@ -373,7 +412,7 @@ private RichTextBean handleParams(ReadableMap map) {
373412 }
374413 if (map .hasKey (ActivityConst .EMOJI_TAG ) && richTextBean .type == 1 ) {
375414 richTextBean .tag = map .getString (ActivityConst .EMOJI_TAG );
376- richTextBean .content = String . format ( mContext . getString ( R . string . insert_emoji ), richTextBean .tag . replaceAll ( " \\ [| \\ ]" , "" )) ;
415+ richTextBean .content = richTextBean .tag ;
377416 }
378417 if (map .hasKey (ActivityConst .NAME )) {
379418 String name = map .getString (ActivityConst .NAME );
@@ -401,7 +440,7 @@ public void insertEmoji(RichTextBean richTextBean) {
401440 editText .getText ().insert (startIndex , richTextBean .tag );
402441 }
403442 Bitmap bitmap = BitmapFactory .decodeResource (getResources (), R .drawable .kuxiao );
404- TextSpan imageSpan = new TextSpan (mContext , bitmap , richTextBean );
443+ TextSpan imageSpan = new TextSpan (mContext , BitmapUtil . setBitmapSize ( bitmap , editText . getTextSize ()) , richTextBean );
405444 mSpannableString = SpannableString .valueOf (editText .getText ());
406445 mSpannableString .setSpan (imageSpan , startIndex , endIndex , Spanned .SPAN_EXCLUSIVE_EXCLUSIVE );
407446 editText .setText (mSpannableString );
@@ -417,7 +456,7 @@ private void insertMentions(RichTextBean richTextBean) {
417456 if (editText .getText () != null ) {
418457 editText .getText ().insert (startIndex , richTextBean .tag + richTextBean .name );
419458 }
420- Bitmap bitmap = BitMapUtil .getTextBitmap (richTextBean .tag + richTextBean .name , editText .getTypeface (), editText .getTextSize (), richTextBean .color );
459+ Bitmap bitmap = BitmapUtil .getTextBitmap (richTextBean .tag + richTextBean .name , editText .getTypeface (), editText .getTextSize (), richTextBean .color );
421460 TextSpan textSpan = new TextSpan (mContext , bitmap , richTextBean );
422461 mSpannableString = SpannableString .valueOf (editText .getText ());
423462 mSpannableString .setSpan (textSpan , startIndex , endIndex , Spanned .SPAN_EXCLUSIVE_EXCLUSIVE );
0 commit comments