Android: статически подчеркнуть динамический текст в TextView

StackOverflow https://stackoverflow.com/questions/4674057

  •  10-10-2019
  •  | 
  •  

Вопрос

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

Связанный: Могу ли я подчеркнуть текст в макете Android?

До сих пор единственный способ, которым я знаю, это - во время выполнения. Это действительно единственный способ? Есть ли способ сделать это в файлах 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);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top