Skip to content

Commit addd9f1

Browse files
duom青源duom青源
authored andcommitted
2 parents 1e77d1e + d0a32e6 commit addd9f1

File tree

4 files changed

+98
-12
lines changed

4 files changed

+98
-12
lines changed

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
import android.graphics.Bitmap;
44
import android.graphics.Canvas;
5+
import android.graphics.Matrix;
56
import android.graphics.Paint;
67
import android.graphics.Rect;
78
import android.graphics.Typeface;
89

9-
public class BitMapUtil {
10+
public class BitmapUtil {
1011

1112
public static Bitmap getTextBitmap(String name, Typeface typeface, float fontSize, int color) {
1213
Paint paint = new Paint();
@@ -28,4 +29,14 @@ public static Bitmap getTextBitmap(String name, Typeface typeface, float fontSiz
2829
canvas.drawText(name, rect.left, rect.height() - rect.bottom, paint);
2930
return bmp;
3031
}
32+
33+
public static Bitmap setBitmapSize(Bitmap bitmap, float size) {
34+
int width = bitmap.getWidth();
35+
int height = bitmap.getHeight();
36+
float scaleWidth = ((float) size) / width;
37+
float scaleHeight = ((float) size) / height;
38+
Matrix matrix = new Matrix();
39+
matrix.postScale(scaleWidth, scaleHeight);
40+
return Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
41+
}
3142
}
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: 44 additions & 5 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) {
@@ -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);
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)