我发现将 SpannableString 的选择粘贴到 SearchView 中可以保留字符串的跨度。将字符串粘贴到 SearchView 中时,去除所有格式的最佳方法是什么?
这是正在发生的事情的一个例子:
上面的文本在粘贴之前是灰色的、斜体的和上标的。
我发现将 SpannableString 的选择粘贴到 SearchView 中可以保留字符串的跨度。将字符串粘贴到 SearchView 中时,去除所有格式的最佳方法是什么?
这是正在发生的事情的一个例子:
上面的文本在粘贴之前是灰色的、斜体的和上标的。
我不确定是否有办法检测文本是粘贴还是直接在SearchView
查询侦听器中手动输入,但您可以绕过它,例如:
TextView
从SearchViewsearch_plate
的布局中获取OnQueryTextListener
TextView
引用重新设置没有跨度的文本。请尝试并告诉我。
int searchTextViewId = mSearchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null);
mSearchTextView = (TextView) mSearchView.findViewById(searchTextViewId);
mSearchView.setOnQueryTextListener(new OnQueryTextListener(){
@Override
public boolean onQueryTextChange(String arg0) {
if(!TextUtils.isEmpty(arg0)){
arg0 = removeSpan(new SpannableString(arg0));
mSearchView.setOnQueryTextListener(null);
mSearchTextView.setText(arg0);
mSearchView.setOnQueryTextListener(this);
}
return false;
}
@Override
public boolean onQueryTextSubmit(String query) {
// TODO Auto-generated method stub
return false;
}});
}
private String removeSpan(Spannable s){
s.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return s.toString();
}
这里还有如何从剪贴板获取最后复制的文本:
private boolean isTextPasted(Context context, String text){
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
if(!clipboard.hasPrimaryClip())
return false;
ClipData clipData = clipboard.getPrimaryClip();
String lastClipText = clipData.getItemAt(clipData.getItemCount()-1).coerceToText(context).toString();
return !TextUtils.isEmpty(lastClipText) && lastClipText.equals(text);
}
您可以将其添加到OnQueryTextListener
.