Ok. Это мои проблемы.
- Мне нужно использовать регулярные выражения, чтобы вырезать все, кроме букв, а затем мне нужно заключить найденные слова в тег $word. При этом str = str.replaceAll(шаблон, "$0");. прямо сейчас я фильтрую все правильные элементы (пунктуацию, цифры и т. д.), но каждая буква в каждом слове заключена в тег a, а не в слово. Итак, как мне использовать регулярное выражение для группировки букв в слово?
from "(открыть тег)t(закрыть)(открыть тег)h(закрыть)(открыть тег)i(закрыть)(открыть тег)s(закрыть) (открыть тег)i(a закрыть)(тег открыт)s(закрыть) (открыть тег)w(закрыть)(открыть тег)r(закрыть)(открыть тег)o(закрыть)(открыть тег)n(a закрыть)(открыть тег)g(закрыть)";
to :
"(открытый тег)Это(закрытие) (открытый тег)это(закрытие) (открытый тег)правильно(закрытие)";
затем я делаю их интерактивными, и мне нужно поймать событие щелчка и получить позицию на экране в слове, по которому щелкнули, поскольку я хочу использовать событие щелчка, чтобы всплывающая подсказка отображалась чуть ниже слова, по которому щелкнули. Спасибо за помощь.
открытый класс MainActivity расширяет активность {
public String text = "This is just a sentence to test you. 23 this is another number23!g?";
public TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = explode(text);
tv = (TextView) findViewById(R.id.tv1);
tv.setLinksClickable(true);
tv.setMovementMethod(LinkMovementMethod.getInstance());
Spanned article = Html.fromHtml(text, null, null);
setHTML(article);
}
public void setHTML(Spanned html) {
SpannableString message = new SpannableString(html.toString());
Object[] spans = html.getSpans(0, html.length(), Object.class);
for (Object span : spans) {
int start = html.getSpanStart(span);
int end = html.getSpanEnd(span);
int flags = html.getSpanFlags(span);
if (span instanceof URLSpan) {
URLSpan urlSpan = (URLSpan) span;
span = new CallbackSpan(urlSpan.getURL());
}
message.setSpan(span, start, end, flags);
}
tv.setText(message);
}
public String explode(String str){
String pattern = "([a-zA-Z])";
str = str.replaceAll(pattern, "<a href=\"$0\">$0</a>");
return str;
}
private final class CallbackSpan extends ClickableSpan {
private String m_data;
private String url_main;
public CallbackSpan(String url) {
m_data = url.substring(0);
url_main = url;
}
public void onClick(View view) {
TextView item = (TextView)findViewById(R.id.tv2);
item.setText(url_main + " was clicked.");
Log.d("item", url_main);
}
}
}