Java 使SpannableString的特定子字符串可编辑
我试图使一个SpannableString的某些子字符串可编辑 使用Java 使SpannableString的特定子字符串可编辑,java,android,android-edittext,spannablestring,Java,Android,Android Edittext,Spannablestring,我试图使一个SpannableString的某些子字符串可编辑 使用matcher.find()和ClickableSpan() 我还可以使用 myTxtView.setFocusable(true); myTxtView.setEnabled(true); myTxtView.setClickable(true); myTxtView.setFocusableInTouchMode(true); myTxtView.setCursorVisible(true); myTxtView.setIn
matcher.find()
和ClickableSpan()
我还可以使用
myTxtView.setFocusable(true);
myTxtView.setEnabled(true);
myTxtView.setClickable(true);
myTxtView.setFocusableInTouchMode(true);
myTxtView.setCursorVisible(true);
myTxtView.setInputType(InputType.TYPE_CLASS_TEXT);
myTxtView.requestFocus();
问题是整个textview变得可编辑,而不仅仅是匹配的子字符串
这是密码
final SpannableString hashText = new SpannableString(myTxtView.getText().toString());
while (matcher2.find()) {
//find and match strings
hashText.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
//do something on click
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#A8000000"));
ds.setUnderlineText(true);
}
},matcher2.start(),matcher2.end(),1);
}
myTxtView.setText(hashText);
myTxtVIew.setMovementMethod(LinkMovementMethod.getInstance());
myTxtView.setFocusable(true);
myTxtView.setEnabled(true);
myTxtView.setClickable(true);
myTxtView.setFocusableInTouchMode(true);
myTxtView.setCursorVisible(true);
myTxtView.setInputType(InputType.TYPE_CLASS_TEXT);
myTxtView.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
我已经使用了
Editable.Factory()
,但没有成功。不确定如何或是否适用于我的情况。您需要使用ClickableSpan
来执行所需的操作,这里有一些代码片段可以帮助您
SpannableString spanString = new SpannableString(text);
Matcher matcher = Pattern.compile("@([A-Za-z0-9_-]+)").matcher(spanString);
while (matcher.find())
{
spanString.setSpan(new ForegroundColorSpan(Color.parseColor("#0000FF")), matcher.start(), matcher.end(), 0); //to highlight word havgin '@'
final String tag = matcher.group(0);
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View textView) {
Log.e("click", "click " + tag);
String searchText=tag.replace("@",""); //replace '@' with blank character to search on google.
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.google.co.in/search?q=" + searchText));
startActivity(browserIntent);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
}
};
spanString.setSpan(clickableSpan, matcher.start(), matcher.end(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
参考
谢谢您的回复。为了澄清这一点,我的代码在着色方面起作用,并且只使彩色字符串可单击,请响应单击。我的问题是,我不知道如何只使可点击/彩色文本可编辑,所谓可编辑,是指通过键盘输入编辑文本。