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

Как определить подчеркнутый текст в xml файле макета Android?

Комментарии к вопросу (1)
Решение

Этого можно добиться, если использовать строчный ресурс xml-файл, который поддерживает HTML-тэги , и ``.


    This is an underline.

Если вы хотите подчеркнуть что-либо в коде, используйте:

TextView textView = (TextView) view.findViewById(R.id.textview);
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
textView.setText(content);
Комментарии (10)

Вы можете попробовать с

textview.setPaintFlags(textview.getPaintFlags() |   Paint.UNDERLINE_TEXT_FLAG);
Комментарии (5)

Приведенный выше "принятый" ответ НЕ работает (при попытке использовать строку типа textView.setText(Html.fromHtml(String.format(getString(...), ...))).

Как указано в документации, необходимо экранировать (в кодировке html-сущности) открывающую скобку внутренних тегов с помощью <, например, результат должен выглядеть следующим образом:


    This is an <u>underline</u>.

Затем в коде можно задать текст с помощью:

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(String.format(getString(R.string.my_string), ...)));
Комментарии (6)

Содержание файла Strings.xml:


     This is an underline. 

Макет xml-файла должен использовать указанный выше строковый ресурс с приведенными ниже свойствами textview, как показано ниже:

Комментарии (1)

Для кнопки и TextView это самый простой способ:

Кнопка:

Button button = (Button) findViewById(R.id.btton1);
button.setPaintFlags(button.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

Виджет TextView:

TextView textView = (TextView) findViewById(R.id.textview1);
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Комментарии (0)

Одним из решений линия

myTextView.помощью setText(формат HTML.fromHtml (и"<п><у>Я подчеркнул текст</п></п> наша"));

Это немного поздно, но может быть полезным для кого-то.

Комментарии (0)

В Котлин функции расширения могут быть использованы. Это можно использовать только код, а не xml-файле.

fun TextView.underline() {
    paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
}

Использование:

 tv_change_number.underline()
 tv_resend_otp.underline()
Комментарии (0)

Последнее рисование подчеркнутый текст описывается Ромен парень средний с исходным кодом, доступным на на GitHub. Этот образец приложения демонстрирует две возможных реализации:

  • На основе пути реализации, что требует API уровня 19
  • В области реализации, что требует API уровня 1

Комментарии (0)

Я знаю, что это поздний ответ, но я придумал решение, которое работает довольно хорошо... я принял ответ от Энтони Forloney для подчеркивания текста в код и создал подкласс виджет TextView, который обрабатывает это для вас. Затем вы можете просто использовать подкласс в XML, когда вы хотите иметь подчеркнутое поле TextView.

Вот класс, который я создал:

import android.content.Context;
import android.text.Editable;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;
import android.widget.TextView;

/**
 * Created with IntelliJ IDEA.
 * User: Justin
 * Date: 9/11/13
 * Time: 1:10 AM
 */
public class UnderlineTextView extends TextView
{
    private boolean m_modifyingText = false;

    public UnderlineTextView(Context context)
    {
        super(context);
        init();
    }

    public UnderlineTextView(Context context, AttributeSet attrs)
    {
        super(context, attrs);
        init();
    }

    public UnderlineTextView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init();
    }

    private void init()
    {
        addTextChangedListener(new TextWatcher()
        {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
                //Do nothing here... we don't care
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                //Do nothing here... we don't care
            }

            @Override
            public void afterTextChanged(Editable s)
            {
                if (m_modifyingText)
                    return;

                underlineText();
            }
        });

        underlineText();
    }

    private void underlineText()
    {
        if (m_modifyingText)
            return;

        m_modifyingText = true;

        SpannableString content = new SpannableString(getText());
        content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
        setText(content);

        m_modifyingText = false;
    }
}

Теперь... всякий раз, когда вы хотите создать подчеркнутое поле TextView в XML, вы просто выполните следующие действия:

Я добавил дополнительные варианты в этой XML-фрагмент, чтобы показать, что мой пример работает с изменяя цвет текста, размер и стиль...

Надеюсь, что это помогает!

Комментарии (1)

Более рациональный способ вместо поле TextView.setPaintFlags(поле TextView.getPaintFlags() | краска.UNDERLINE_TEXT_FLAG); метод состоит в использовании поле TextView.getPaint().setUnderlineText(истина);

И если вам нужно позже выключить подчеркивание Для что посмотреть, например, в повторно смотреть в RecyclerView, поле TextView.getPaint().setUnderlineText(ложь);

Комментарии (0)

проверьте подчеркнул кликабельная кнопка стиль:

strings.xml:

Add new contact

Результат:

Комментарии (1)

Я использовал этот XML-мешочки, чтобы создать нижнюю границу и прикладной папке drawable в качестве фона для моего виджет TextView














Комментарии (1)

Просто используйте <у> атрибут строки в файл ресурсов, например

Example
Комментарии (0)

Блин, это самый простой в использовании

TextView tv = findViewById(R.id.tv);
tv.setText("some text");

Весь подчеркнутый элемент TextView

setUnderLineText(tv, tv.getText().toString());

Подчеркнуть какую-то часть объекта TextView

setUnderLineText(tv, "some");

также поддержка виджет TextView, как Чайлдс полей EditText, кнопка, флажок

public void setUnderLineText(TextView tv, String textToUnderLine) {
        String tvt = tv.getText().toString();
        int ofe = tvt.indexOf(textToUnderLine, 0);

        UnderlineSpan underlineSpan = new UnderlineSpan();
        SpannableString wordToSpan = new SpannableString(tv.getText());
        for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
            ofe = tvt.indexOf(textToUnderLine, ofs);
            if (ofe == -1)
                break;
            else {
                wordToSpan.setSpan(underlineSpan, ofe, ofe + textToUnderLine.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);
            }
        }
    }

проверить мой ответ здесь, чтобы сделать кликабельные подчеркивание текста, подчеркивание различных частей объекта TextView

Комментарии (0)

Простое и гибкое решение в XML:

Комментарии (0)

другое решение-создать настраиваемое представление, продлить виджет TextView, как показано ниже

public class UnderLineTextView extends TextView {

    public UnderLineTextView(Context context) {
        super(context);
        this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
    }

    public UnderLineTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
    }

}

и просто добавить в XML, как показано ниже

Комментарии (1)

Я упростил Самуил'ы ответа:








Комментарии (0)

попробуйте этот код

в XML


 underline]]> 

в коде

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(getString(R.string.my_text)));

Удачи!

Комментарии (0)
  1. Перейти к strings.xml файл ресурсов
  2. Добавить строку в файл ресурсов с помощью HTML-тега подчеркнуть, где это необходимо.
  1. Назвать идентификатор ресурса строки в ваш Java-код, как показано ниже:

sampleTextView.помощью setText(Р. строкой.sample_string);

  1. На выходе должно быть слово "на сайте StackOverflow" и подчеркнул.

Кроме того, следующий код не будет печатать подчеркнуть:

String sampleString = getString(R.string.sample_string);
sampleTextView.setText(sampleString);

Вместо этого, используйте следующий код, чтобы сохранить форматированный текст:

CharSequence sampleString = getText(R.string.sample_string);
sampleTextView.setText(sampleString);

<б>"Вы можете использовать либо метода getString(инт) или gettext(int) получать строку. то gettext(инт) сохраняет богатый текстовый стиль применяется к строке.&и"</б> Андроид документации.

Обратитесь к документации: https://developer.android.com/guide/topics/resources/string-resource.html

Я надеюсь, что это помогает.

Комментарии (0)
HtmlCompat.fromHtml(
                    String.format(context.getString(R.string.set_target_with_underline)),
                    HtmlCompat.FROM_HTML_MODE_LEGACY)
<u>Set Target<u> 

Обратите внимание на символ побег в XML-файл

Комментарии (0)