Skip to content

Commit 8d4d152

Browse files
author
ellieshen
committed
android 屏蔽分享按钮&修复复制剪切bug
1 parent addd9f1 commit 8d4d152

File tree

2 files changed

+69
-23
lines changed

2 files changed

+69
-23
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,13 @@ public boolean onTextContextMenuItem(int id) {
3636
switch (id) {
3737
case android.R.id.cut:
3838
mOnMenuItemCallBack.onCut();
39-
break;
39+
return true;
4040
case android.R.id.copy:
4141
mOnMenuItemCallBack.onCopy();
42-
break;
42+
return true;
4343
case android.R.id.paste:
4444
mOnMenuItemCallBack.onPaste();
45-
break;
45+
return true;
4646
}
4747
return super.onTextContextMenuItem(id);
4848
}

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

Lines changed: 66 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,18 @@
1010
import android.graphics.PorterDuff;
1111
import android.graphics.Typeface;
1212
import android.graphics.drawable.Drawable;
13+
import android.os.Build;
1314
import android.text.Editable;
1415
import android.text.SpannableString;
1516
import android.text.Spanned;
1617
import android.text.TextUtils;
1718
import android.text.TextWatcher;
1819
import android.util.DisplayMetrics;
1920
import android.util.Log;
21+
import android.view.ActionMode;
2022
import android.view.Gravity;
23+
import android.view.Menu;
24+
import android.view.MenuItem;
2125
import android.view.inputmethod.InputMethodManager;
2226
import android.widget.LinearLayout;
2327
import android.widget.ScrollView;
@@ -52,7 +56,7 @@ public class VariableTextInput extends LinearLayout {
5256

5357
private Context mContext;
5458
private SpannableString mSpannableString;
55-
59+
private Editable mEditable;
5660
public VariableTextInput(Context context) {
5761
super(context);
5862
this.mContext = context;
@@ -150,39 +154,85 @@ public void afterTextChanged(Editable s) {
150154
editText.setOnMenuItemCallBack(new VariableEditText.OnMenuItemCallBack() {
151155
@Override
152156
public void onCut() {
153-
handleClipBoardData();
157+
handleClipBoardData(handleSelectData());
158+
if (editText.getText() != null) {
159+
editText.getText().delete(editText.getSelectionStart(), editText.getSelectionEnd());
160+
}
154161
}
155162

156163
@Override
157164
public void onCopy() {
158-
handleClipBoardData();
165+
handleClipBoardData(handleSelectData());
159166
}
160167

161168
@Override
162169
public void onPaste() {
163-
Log.e("onPaste", "执行onPaste方法");
170+
// Log.e("onPaste", "执行onPaste方法--->" + mEditable);
171+
if (editText.getText() != null && mEditable != null) {
172+
editText.getText().insert(editText.getSelectionStart(), mEditable);
173+
}
164174
}
165175
});
176+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
177+
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
178+
@Override
179+
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
180+
int size = menu.size();
181+
for (int i = size - 1; i >= 0; i--) {
182+
int itemId = menu.getItem(i).getItemId();
183+
if (itemId != android.R.id.cut && itemId != android.R.id.copy
184+
&& itemId != android.R.id.selectAll && itemId != android.R.id.paste) {
185+
menu.removeItem(itemId);
186+
}
187+
}
188+
return true;
189+
}
190+
191+
@Override
192+
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
193+
return false;
194+
}
195+
196+
@Override
197+
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
198+
return false;
199+
}
200+
201+
@Override
202+
public void onDestroyActionMode(ActionMode actionMode) {
203+
204+
}
205+
});
206+
}
166207
}
167208

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;
209+
private Editable handleSelectData() {
210+
if (editText.getText() != null) {
211+
mEditable = Editable.Factory.getInstance().newEditable(editText.getText().subSequence(editText.getSelectionStart(), editText.getSelectionEnd()));
212+
TextSpan[] spans = mEditable.getSpans(0, mEditable.length(), TextSpan.class);
213+
if (spans == null || spans.length == 0) return null;
175214
for (TextSpan span : spans) {
176215
String text = span.getRichTextBean().tag;
177216
if (!TextUtils.isEmpty(span.getRichTextBean().name)) {
178217
text = span.getRichTextBean().tag + span.getRichTextBean().name;
179218
}
180-
int startIndex = editable.getSpanStart(span);
181-
int endIndex = editable.getSpanEnd(span);
182-
editable.replace(startIndex, endIndex, text);
219+
int startIndex = mEditable.getSpanStart(span);
220+
int endIndex = mEditable.getSpanEnd(span);
221+
mEditable.replace(startIndex, endIndex, text);
222+
}
223+
return mEditable;
224+
}
225+
return null;
226+
}
227+
228+
//处理粘贴板数据
229+
private void handleClipBoardData(Editable editable) {
230+
if (editable != null && editable.length() > 0) {
231+
ClipboardManager clipboardManager = (ClipboardManager) mContext.getSystemService(Context.CLIPBOARD_SERVICE);
232+
if (clipboardManager != null) {
233+
ClipData clipData = ClipData.newPlainText("text", editable);
234+
clipboardManager.setPrimaryClip(clipData);
183235
}
184-
ClipData clipData = ClipData.newPlainText("text", editable);
185-
clipboardManager.setPrimaryClip(clipData);
186236
}
187237
}
188238

@@ -433,9 +483,7 @@ private RichTextBean handleParams(ReadableMap map) {
433483

434484
public void insertEmoji(RichTextBean richTextBean) {
435485
int startIndex = editText.getSelectionStart();
436-
Log.e("startIndex", startIndex + "");
437486
int endIndex = startIndex + richTextBean.tag.length();
438-
Log.e("endIndex", endIndex + "");
439487
if (editText.getText() != null) {
440488
editText.getText().insert(startIndex, richTextBean.tag);
441489
}
@@ -450,9 +498,7 @@ public void insertEmoji(RichTextBean richTextBean) {
450498

451499
private void insertMentions(RichTextBean richTextBean) {
452500
int startIndex = editText.getSelectionStart();
453-
Log.e("startIndex", startIndex + "");
454501
int endIndex = startIndex + richTextBean.tag.length() + richTextBean.name.length();
455-
Log.e("endIndex", endIndex + "");
456502
if (editText.getText() != null) {
457503
editText.getText().insert(startIndex, richTextBean.tag + richTextBean.name);
458504
}

0 commit comments

Comments
 (0)