Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使SpannableString的特定子字符串可编辑_Java_Android_Android Edittext_Spannablestring - Fatal编程技术网

Java 使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

我试图使一个SpannableString的某些子字符串可编辑

使用
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);
    }
参考


谢谢您的回复。为了澄清这一点,我的代码在着色方面起作用,并且只使彩色字符串可单击,请响应单击。我的问题是,我不知道如何只使可点击/彩色文本可编辑,所谓可编辑,是指通过键盘输入编辑文本。