Щоб намалювати підкреслення під TextView в Android


Відповіді:


323

Існує три способи підкреслення тексту в TextView.

  1. SpannableString

  2. setPaintFlags (); TextView

  3. Html.fromHtml ();

Дозвольте пояснити вам усі підходи:

1-й підхід

Для підкреслення тексту в TextView ви повинні використовувати SpannableString

String udata="Underlined Text";
SpannableString content = new SpannableString(udata);
content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
mTextView.setText(content);

2-й підхід

Ви можете використовувати метод setPaintFlags TextView, щоб підкреслити текст TextView.

Наприклад, наприклад.

mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mTextView.setText("This text will be underlined");

Ви можете посилатися на константи класу Paint, якщо хочете закреслити текст.

3-й підхід

Використовувати Html.fromHtml(htmlString);

String htmlString="<u>This text will be underlined</u>";
mTextView.setText(Html.fromHtml(htmlString));

АБО

txtView.setText(Html.fromHtml("<u>underlined</u> text"));

1
Рада це почути. Позначте це питання вирішеним, щоб інші користувачі могли його посилатись.
Картик Домадія

4
Третій підхід буде використовувати Html.fromHtml("<u>This text will be underlined</u>"), але я повинен визнати, що я набагато більший шанувальник використання SpannableStrings. @Kartik: Ви також можете використовувати StrikethroughSpanтекст у тексті, щоб створити закреслений ефект. :)
МЗ.

Любіть 3-й підхід. Короткий, простий і стислий і додає до моєї програми лише один додатковий рядок коду.
Метт

Я знаю, що це щось старе, але чи є спосіб встановити товщину підкреслення?
Андреас Вонг

який із них використовується для вмісту preferenceActivity у категорії PreferenceCategory?
андроїд розробник

40

просто обведіть текст тегом <u> у файлі ресурсу string.xml

<string name="your_string"><u>Underlined text</u></string>

і у вашій діяльності / фрагменті

mTextView.setText(R.string.your_string);

7
@CHAKRAVARTHI не буде працювати, якщо ви додасте текст до рядка перед налаштуванням. Наприклад textView.setText(getString(R.string.text)) <- неправильно . Правильно: textView.setText(getText(R.string.text)) або просто textView.setText(R.string.text). Причина beind це , що getText()повертається Spannableз підкресленням прольотів, але якщо ви використовуєте getString()це буде конвертувати Spannableв Stringрезультаті прольотів видаляються.
Ярослав Миткалик

гарна думка! Я відредагував свою сьогоднішню відповідь, щоб бути більш зрозумілим
Сарпе


11

Для тих, хто ще дивиться на цей запит. Це для гіперпосилання, але ви можете змінити його лише для простого підкреслення:

Створіть рисунок (гіперпосилання_underline.xml):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:top="-10dp"
        android:left="-10dp"
        android:right="-10dp">
    <shape android:shape="rectangle">
      <solid android:color="@android:color/transparent"/>

      <stroke android:width="2dp"
              android:color="#3498db"/>
    </shape>
  </item>
</layer-list>

Створіть новий стиль:

<style name="Hyperlink">
    <item name="android:textColor">#3498db</item>
    <item name="android:background">@drawable/hyperlink_underline</item>
  </style>

Потім використовуйте цей стиль у своєму TextView:

<TextView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    local:MvxBind="Text Id; Click ShowJobInfoCommand"
    style="@style/HyperLink"/>

3

Якщо ваш TextView має фіксовану ширину, альтернативним рішенням може бути створення перегляду, який буде схожий на підкреслення, і розташування його прямо під текстовим переглядом.

<RelativeLayout
   android:layout_width="match_parent"
   android:layout_height="match_parent">

        <TextView
            android:id="@+id/myTextView"
            android:layout_width="20dp"
            android:layout_height="wrap_content"/>

        <View
            android:layout_width="20dp"
            android:layout_height="1dp"
            android:layout_below="@+id/myTextView"
            android:background="#CCCCCC"/>
</RelativeLayout>

2

Просте і стійке рішення - створити список шарів і зробити його фоном вашого TextView:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:left="-5dp"
        android:right="-5dp"
        android:top="-5dp">
        <shape>
            <stroke
                android:width="1.5dp"
                android:color="@color/colorAccent" />
        </shape>
    </item>
</layer-list>

2
Це найкращий вибір, якщо це однорядковий перегляд тексту
hushed_voice

0

підкреслити перегляд тексту в android

5 дивовижних способів підкреслити TextView в Android - Kotlin / Java & XML

  1. String html = "<u>Underline using Html.fromHtml()</u>"; textview.setText(Html.fromHtml(html));

Але Html.fromHtml (String-ресурс) був застарілий в API 24.

Таким чином, ви можете використовувати найновішу бібліотеку підтримки для androidx.core.text.HtmlCompat для Android . Перед цим потрібно включити залежність у свій проект.

`implementation 'androidx.core:core:1.0.1'`
  1. String html = "<u> 1.1 Underline using HtmlCompat.fromHtml()</u>"; //underline textview using HtmlCompat.fromHtml() method textview11.setText(HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY));

Використовуючи strings.xml ,

  1. <string name="underline_text">1.3 &lt;u>Underline using HtmlCompat.fromHtml() and string resource&lt;/u></string>

textview13.setText(HtmlCompat.fromHtml(getString(R.string.underline_text), HtmlCompat.FROM_HTML_MODE_LEGACY));

за допомогою PaintFlags

  1. textview2.setPaintFlags(textview2.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); textview2.setText("2. Underline using setPaintFlags()");

за допомогою SpannableString

`String content1 = "3.1 Underline using SpannableString";
        SpannableString spannableString1 = new SpannableString(content1);
        spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
        textview31.setText(spannableString1);`
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.