use ClickableSpan
this will make clickable word respond to click event
TextView textView = findViewById(R.id.tv_links);
final String login = getString(R.string.login);
final String register = getString(R.string.register);
String format = getString(R.string.title);
String title = String.format(format, login, register);
addLinksClickEvent(title, textView, new Pair(login, new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, login + " Clicked", Toast.LENGTH_SHORT).show();
}
}), new Pair(register, new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, register + " Clicked", Toast.LENGTH_SHORT).show();
}
}));
the method wchich do the clicks part which is inspired from one answers of this question but in java
@SafeVarargs
public final void addLinksClickEvent(final String text, TextView textView, Pair<String, View.OnClickListener>... links) {
final SpannableString spannableString = new SpannableString(text);
for (final Pair<String, View.OnClickListener> link : links) {
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View view) {
Selection.setSelection((Spannable) ((TextView) view).getText(), 0);
view.invalidate();
link.second.onClick(view);
}
};
int startIndexOfLink = text.indexOf(link.first);
spannableString.setSpan(clickableSpan, startIndexOfLink, startIndexOfLink + link.first.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(spannableString, TextView.BufferType.SPANNABLE);
}
I use Arabic and English languages so
values
<string name="title">You can %1$s or if you donn\'t have account you can %2$s</string>
<string name="login">login</string>
<string name="register">register</string>
values-ar
<string name="login">تسجيل الدخول </string>
<string name="register">التسجيل </string>
<string name="title">يمكنك %1$s, اذا لما يكمن لديك حساب يمكنك %2$s من هنا</string>