现在我正在开发一个 Android 应用程序,该应用程序需要允许用户剪切副本并将其粘贴到 editText
字段中。但是,当我从其他地方复制格式化字符串(即带下划线的字符串)并将其粘贴到 editText
字段时,它会将其显示为格式化版本。我该如何删除它?
我尝试通过添加 addTextChangedListener
来添加 textwatcher
,在文本更改后我只需执行 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;
}
});
这工作得很好,直到我意识到我的手机上有两种类型的剪切/复制/粘贴。一种是当编辑文本为空并且我长按该字段时。这将弹出一个弹出菜单。另一种是当字段中有文本时,当我长按时,这会在操作栏下方弹出一个剪切/复制/粘贴栏。我上面的代码仅影响操作栏下方的栏。 :(
最佳答案
问题:
您正在做的事情是创建一个无限循环,因为每次您调用 setText()
时,都会再次调用 afterTextChanged()
(因为您正在更改编辑文本
。
解决方案:
假设EditText
是editTextToClearStyle
EditText editTextToClearStyle = (EditText)findViewById(R.id.youredittextname);
editTextToClearStyle.addTextChangedListener(new TextWatcher(){
public void afterTextChanged(Editable s) {
editTextToClearStyle.setTextAppearance(getApplicationContext(),R.style.normalText);
}
关于java - 如何在 Android 上从剪贴板粘贴时删除文本格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25602198/