目前我正在开发一款Android应用程序,该应用程序需要允许用户剪切复制并粘贴到editText
字段。但是当我从其他位置复制格式化的字符串(即带下划线的字符串)并将其粘贴到editText
字段时,它会将其显示为格式化版本。如何删除它?
我尝试通过添加textwatcher
添加addTextChangedListener
,并且在后文本更改中我只做edittext.setText(s.toString()+"")
但这会创建一个无限循环。 :(
请帮忙!提前谢谢。
编辑---- 我通过设置setCustomSelectionActionModeCallback
取得了一些进展editDestination_.setCustomSelectionActionModeCallback(new Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {return true;}
@Override
public void onDestroyActionMode(ActionMode mode) {}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
menu.removeItem(android.R.id.paste);
menu.removeItem(android.R.id.selectAll);
menu.add(0, CUSTOM_PASTE, 0, "Paste").setIcon(R.drawable.paste_ic);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case CUSTOM_PASTE:
edittext.setText(readFromClipboard(aContext_));
// Finish and close the ActionMode
mode.finish();
return true;
default:
break;
}
return false;
}
});
这很有效,直到我发现手机上有两种类型的剪切/复制/粘贴。一个是编辑文本为空时我长时间点击该字段。这会弹出一个弹出菜单。另一个是当字段中有文本时,当我长按时,这会在我的操作栏下面显示剪切/复制/粘贴栏。我上面的代码只影响了一个低于行动的条形码。 :(
答案 0 :(得分:0)
问题:
你正在做的事情是创建一个无限循环,因为每当你调用setText()
时,再次调用afterTextChanged()
(因为你正在更改EditText
内的文本。
解决方案:
假设EditText
为editTextToClearStyle
EditText editTextToClearStyle = (EditText)findViewById(R.id.youredittextname);
editTextToClearStyle.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
editTextToClearStyle.setTextAppearance(getApplicationContext(),R.style.normalText);
}
答案 1 :(得分:0)
我已经解决了。 我在弹出剪切/复制/粘贴菜单出现之前设置了一个长按单元监听器来捕获它
CharSequence actions[] = new CharSequence[] {"paste"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setCancelable(true);
builder.setItems(actions, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
edittext.setText(readFromClipboard(aContext_));
}
});
builder.show();
然后如果编辑文本中已经存在字符串,我返回false以允许正常的android系统under-action-bar-cut / copy / paste功能工作。