Android: статически подчеркивать динамический текст в TextView - PullRequest
6 голосов
/ 13 января 2011

Я хотел бы сделать TextView полностью подчеркнутым, но я не могу использовать текстовый ресурс и тег <u>, потому что это динамический текст.

Похожие: Можно ли подчеркнуть текст в макете Android?

Пока что единственный способ, которым я знаю, это сделать во время выполнения. Это действительно единственный способ? Есть ли способ сделать это в файлах XML?

Ответы [ 5 ]

18 голосов
/ 13 января 2011

Возможно, самое простое решение - создать пользовательский компонент UnderLineTextView, производный от 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

14 голосов
/ 13 января 2011

Вы можете подчеркнуть текст над Html.fromHtml (источник строки)

Пример:

textView.setText(Html.fromHtml("this is <u>underlined</u> text"));
1 голос
/ 26 января 2011

Вы также можете сделать это через файл /res/values/string.xml, если хотите: Например, в /res/values/string.xml вы можете добавить запись типа:

<string name="createAccount"><u>Create Account</u></string>

А затем в onCreate (Bundle saveInstanceState) метод вашей деятельности вы добавили бы следующий код, чтобы «Создать учетную запись»> отображался как подчеркнутый в пользовательском интерфейсе, который вы установили для текстового представления createAccountText, которое вы определили в 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);
0 голосов
/ 22 апреля 2016
 SpannableString content = new SpannableString(name);
 content.setSpan(new UnderlineSpan(), 0, name.length(), 0);
 geometrical_textview.setText(content, TextView.BufferType.SPANNABLE);
0 голосов
/ 04 марта 2015

peter3 писал ранее, чтобы расширить класс TextView и переопределить метод setText.

Это решение не будет работать, поскольку метод setText помечен как FINAL.

http://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)

Не уверен, что код может работать с некоторыми изменениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...