Android: статически подчеркнуть динамический текст в TextView
Вопрос
Я хотел бы сделать TextView полностью подчеркнутый, но я не могу использовать текстовый ресурс и <u>
Теги, потому что это динамический текст.
До сих пор единственный способ, которым я знаю, это - во время выполнения. Это действительно единственный способ? Есть ли способ сделать это в файлах XML?
Решение
Самое простое решение, вероятно, состоит в том, чтобы создать пользовательский компонент BendlineTextView, вытекающий из TextView, переопределить setText () и установить весь текст как подчеркнутый, что -то вроде этого (подчеркивается код по ссылке, о которой вы упомянули выше):
@Override
public void setText(CharSequence text, BufferType type) {
// code to check text for null omitted
SpannableString content = new SpannableString(text);
content.setSpan(new UnderlineSpan(), 0, text.length(), 0);
super.setText(content, BufferType.SPANNABLE);
}
Тогда это просто вопрос использования вашего нового компонента в макете и настройки текста как обычно. Остальное обрабатывается автоматически.
Больше информации о пользовательских компонентах:http://developer.android.com/guide/topics/ui/custom-components.html
Другие советы
Вы можете подчеркнуть текст Html.fromhtml (String Source)
Пример:
textView.setText(Html.fromHtml("this is <u>underlined</u> text"));
Вы также можете сделать это через /res/values/string.xml
файл, если вы предпочитаете: например, в /res/values/string.xml
Вы можете добавить запись как:
<string name="createAccount"><u>Create Account</u></string>
А затем в методе Oncreate (Bundle SaveDinStanceState) вашей деятельности вы добавите следующий код, чтобы заставить «создать учетную запись»> появиться как подчеркнутый в пользовательском интерфейсе, который вы установили для CreateAccountText TextView, который вы определили в файле XML в файле. /res/layout/
Для вашей деятельности:
TextView createAccountText = (TextView) findViewById(R.id.createAccountText);
Resources res = getResources();
CharSequence styledText = res.getText(R.string.createAccount);
createAccountText.setText(styledText, TextView.BufferType.SPANNABLE);
Peter3 писал ранее, чтобы расширить класс TextView и переопределить метод SetText.
Это решение не будет работать, так как метод SetText помечен как окончательный.
http://developer.android.com/reference/android/widget/textview.html#settext мило
Не уверен, может ли код работать с некоторыми изменениями.
SpannableString content = new SpannableString(name);
content.setSpan(new UnderlineSpan(), 0, name.length(), 0);
geometrical_textview.setText(content, TextView.BufferType.SPANNABLE);