Текст стиля параметра в методе getString (int resId, Object... formatArgs)
у меня есть два строковых ресурса как таковых:
<string name="give_us_feedback">Give us feedback at %1$s if you want to make the app even better!</string>
<string name="email">info@mycompany.com</string>
Я хотел бы, чтобы стиль электронной почты был синим и подчеркнут, чтобы указать, что пользователь может нажать на него (весь TextView, а не только текст электронной почты). Я знаю, что использовать SpannableString для цветного текста, но он, похоже, не работает, когда я объединяю две строки через getString(int resId, Object... formatArgs), предположительно потому, что getString () будет выполнять приведение или .toString () для отправляемого объекта. Вот что не работа:
TextView emailTV = new TextView(this);
SpannableString email = new SpannableString(getString(R.string.email));
email.setSpan(new UnderlineSpan(), 0, email.length() - 1, 0);
email.setSpan(new ForegroundColorSpan(Color.BLUE), 0, email.length() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
String feedback = getString(R.string.give_us_feedback, email);
emailTV.setText(feedback);
какие идеи?
1 ответов
Это немного сложнее. Преобразование обратно в charsequence (String feedback = getString(R.string.give_us_feedback, email);
) заставляет исчезнуть Spannable
. Попробуйте этот способ (вы хотите проверить правильность индексов в строку)
String emailString = getString(R.string.email);
String feedback = getString(R.string.give_us_feedback, emailString);
SpannableString email = new SpannableString(feedback);
int startIndex = feedBack.indexOf(emailString);
int endIndex = startIndex + emailString.length();
email.setSpan(new UnderlineSpan(), startIndex, endIndex, 0);
email.setSpan(new ForegroundColorSpan(Color.BLUE), startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
emailTV.setText(email);