如何知道选择了 TextView 的哪一部分
How to Know What Part of a TextView was Selected
我正在根据从 xml 文章中解析的文本动态填充 activity 上的文本视图。文本使用 html 标签进行格式化,因此我将文本设置为:
textViewBody.setText(Html.fromHtml(content));
文章被设置为网站正文中的一些文本、另一篇本地文章,或者只是显示文本。之前,我们最多只有1个link,所以我使用了这个代码:
textViewBody.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (textViewBody.getUrls().length != 0) {
String link = textViewBody.getUrls()[0].getURL();
Intent i;
if (link.startsWith("article")) {
i = new Intent(getActivity().getApplicationContext(), ArticleActivity.class);
i.putExtra("file", link.substring(10));
i.putExtra("title", parentView.article.title);
startActivity(i);
} else if (link.startsWith("http")) {
i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(link));
startActivity(i);
}
} else {
// Regular body text was selected.
}
}
});
效果很好,但现在有些文章不止一篇 link 它只会打开第一篇(因为这是我设置的)。我的问题是,如何设置 textview 以了解我点击了什么 link?同样,该文本是动态的(并且有大约 200 多篇 xml 文章),所以我无法根据已知的 link 列表检查字符串的内容。
值得一提的是,这是在片段上完成的(ArticleActivity 是一个 tabHost,其中一个选项卡显示文章的文本)。
甚至不要尝试通过 onTouch 执行此操作。使用 Spannables,并将每个 link 放在一个可点击的范围内 - http://developer.android.com/reference/android/text/style/ClickableSpan.html。然后当文本被点击时,它的 onClick 方法将被调用,它可以执行任何它需要的操作。
我认为这是获取选定文本并在 textview 上找到开始和结束选定文本的简单方法
TextView mTextView = findViewById(R.id.textView);
if (mTextView.isFocused()) {
final int selStart = mTextView.getSelectionStart();
final int selEnd = mTextView.getSelectionEnd();
int min = Math.max(0, Math.min(selStart, selEnd));
int max = Math.max(0, Math.max(selStart, selEnd));
final CharSequence selectedText = mTextView.getText().subSequence(min, max);
Toast.makeText(getApplicationContext(), selectedText, Toast.LENGTH_SHORT).show();
selected = selectedCafeWeb;
Toast.makeText(getBaseContext(), selected + " " + selectedText.toString(), Toast.LENGTH_SHORT);
}
我正在根据从 xml 文章中解析的文本动态填充 activity 上的文本视图。文本使用 html 标签进行格式化,因此我将文本设置为:
textViewBody.setText(Html.fromHtml(content));
文章被设置为网站正文中的一些文本、另一篇本地文章,或者只是显示文本。之前,我们最多只有1个link,所以我使用了这个代码:
textViewBody.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (textViewBody.getUrls().length != 0) {
String link = textViewBody.getUrls()[0].getURL();
Intent i;
if (link.startsWith("article")) {
i = new Intent(getActivity().getApplicationContext(), ArticleActivity.class);
i.putExtra("file", link.substring(10));
i.putExtra("title", parentView.article.title);
startActivity(i);
} else if (link.startsWith("http")) {
i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(link));
startActivity(i);
}
} else {
// Regular body text was selected.
}
}
});
效果很好,但现在有些文章不止一篇 link 它只会打开第一篇(因为这是我设置的)。我的问题是,如何设置 textview 以了解我点击了什么 link?同样,该文本是动态的(并且有大约 200 多篇 xml 文章),所以我无法根据已知的 link 列表检查字符串的内容。
值得一提的是,这是在片段上完成的(ArticleActivity 是一个 tabHost,其中一个选项卡显示文章的文本)。
甚至不要尝试通过 onTouch 执行此操作。使用 Spannables,并将每个 link 放在一个可点击的范围内 - http://developer.android.com/reference/android/text/style/ClickableSpan.html。然后当文本被点击时,它的 onClick 方法将被调用,它可以执行任何它需要的操作。
我认为这是获取选定文本并在 textview 上找到开始和结束选定文本的简单方法
TextView mTextView = findViewById(R.id.textView);
if (mTextView.isFocused()) {
final int selStart = mTextView.getSelectionStart();
final int selEnd = mTextView.getSelectionEnd();
int min = Math.max(0, Math.min(selStart, selEnd));
int max = Math.max(0, Math.max(selStart, selEnd));
final CharSequence selectedText = mTextView.getText().subSequence(min, max);
Toast.makeText(getApplicationContext(), selectedText, Toast.LENGTH_SHORT).show();
selected = selectedCafeWeb;
Toast.makeText(getBaseContext(), selected + " " + selectedText.toString(), Toast.LENGTH_SHORT);
}