Skip to content

Commit c99406f

Browse files
author
ellieshen
committed
android 重写复制剪切方法,处理插入用户话题数据
1 parent 25762cd commit c99406f

File tree

4 files changed

+86
-11
lines changed

4 files changed

+86
-11
lines changed

android/src/main/java/com/variabletextinput/util/BitMapUtil.java renamed to android/src/main/java/com/variabletextinput/util/BitmapUtil.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import android.graphics.Rect;
77
import android.graphics.Typeface;
88

9-
public class BitMapUtil {
9+
public class BitmapUtil {
1010

1111
public static Bitmap getTextBitmap(String name, Typeface typeface, float fontSize, int color) {
1212
Paint paint = new Paint();
Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,26 @@
11
package com.variabletextinput.view;
2+
23
import android.content.Context;
34
import android.util.AttributeSet;
45

5-
public class VariableEditText extends androidx.appcompat.widget.AppCompatEditText {
6+
import androidx.appcompat.widget.AppCompatEditText;
7+
8+
public class VariableEditText extends AppCompatEditText {
9+
10+
private OnMenuItemCallBack mOnMenuItemCallBack;
11+
612
public VariableEditText(Context context) {
713
super(context);
814
}
9-
public VariableEditText(Context context, AttributeSet attrs){
10-
super(context,attrs);
15+
16+
public VariableEditText(Context context, AttributeSet attrs) {
17+
super(context, attrs);
1118
}
12-
public VariableEditText(Context context,AttributeSet attrs,int defStyleAttr){
13-
super(context,attrs,defStyleAttr);
19+
20+
public VariableEditText(Context context, AttributeSet attrs, int defStyleAttr) {
21+
super(context, attrs, defStyleAttr);
1422
}
23+
1524
@Override
1625
public boolean isLayoutRequested() {
1726
// If we are watching and updating container height based on content size
@@ -21,4 +30,32 @@ public boolean isLayoutRequested() {
2130
// of text.
2231
return false;
2332
}
33+
34+
@Override
35+
public boolean onTextContextMenuItem(int id) {
36+
switch (id) {
37+
case android.R.id.cut:
38+
mOnMenuItemCallBack.onCut();
39+
break;
40+
case android.R.id.copy:
41+
mOnMenuItemCallBack.onCopy();
42+
break;
43+
case android.R.id.paste:
44+
mOnMenuItemCallBack.onPaste();
45+
break;
46+
}
47+
return super.onTextContextMenuItem(id);
48+
}
49+
50+
public void setOnMenuItemCallBack(OnMenuItemCallBack onMenuItemCallBack) {
51+
mOnMenuItemCallBack = onMenuItemCallBack;
52+
}
53+
54+
public interface OnMenuItemCallBack {
55+
void onCut();
56+
57+
void onCopy();
58+
59+
void onPaste();
60+
}
2461
}

android/src/main/java/com/variabletextinput/view/VariableTextInput.java

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.variabletextinput.view;
22

33
import android.app.Activity;
4+
import android.content.ClipData;
5+
import android.content.ClipboardManager;
46
import android.content.Context;
57
import android.content.res.ColorStateList;
68
import android.graphics.Bitmap;
@@ -33,7 +35,7 @@
3335
import com.variabletextinput.R;
3436
import com.variabletextinput.bean.RichTextBean;
3537
import com.variabletextinput.util.ActivityConst;
36-
import com.variabletextinput.util.BitMapUtil;
38+
import com.variabletextinput.util.BitmapUtil;
3739
import com.variabletextinput.widget.TextSpan;
3840

3941
import 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) {
@@ -371,7 +410,7 @@ private RichTextBean handleParams(ReadableMap map) {
371410
}
372411
if (map.hasKey(ActivityConst.EMOJI_TAG) && richTextBean.type == 1) {
373412
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;
375414
}
376415
if (map.hasKey(ActivityConst.NAME)) {
377416
String name = map.getString(ActivityConst.NAME);
@@ -415,7 +454,7 @@ private void insertMentions(RichTextBean richTextBean) {
415454
if (editText.getText() != null) {
416455
editText.getText().insert(startIndex, richTextBean.tag + richTextBean.name);
417456
}
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);
419458
TextSpan textSpan = new TextSpan(mContext, bitmap, richTextBean);
420459
mSpannableString = SpannableString.valueOf(editText.getText());
421460
mSpannableString.setSpan(textSpan, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<resources>
33
<string name="insert_mention">{%s}[%s](%s)</string>
4-
<string name="insert_emoji">[\"%s\"]</string>
54
</resources>

0 commit comments

Comments
 (0)