Чтобы нарисовать подчеркивание под TextView в Android - PullRequest
103 голосов
/ 07 ноября 2011

Я хочу нарисовать подчеркивание ниже моего TextView. Я искал немного контента, но не смог найти ничего полезного.

Может кто-нибудь помочь мне здесь?

Ответы [ 6 ]

297 голосов
/ 07 ноября 2011

Существует три способа скрыть текст в 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-йПодход

Вы можете использовать метод TextView setPaintFlags для подчеркивания текста 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"));
37 голосов
/ 25 ноября 2013

просто окружите ваш текст тегом в файле ресурсов string.xml

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

и в вашей Деятельности / Фрагмент

mTextView.setText(R.string.your_string);
14 голосов
/ 11 сентября 2014

Это работает для меня.

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
9 голосов
/ 16 марта 2015

Для тех, кто все еще смотрит на этот вопрос.Это для гиперссылки, но вы можете изменить ее только для простого подчеркивания:

Создать чертеж (hyperlink_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"/>
2 голосов
/ 17 апреля 2018

Простое и устойчивое решение - создать список слоев и сделать его фоном вашего 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>
1 голос
/ 03 мая 2017

Если ваш TextView имеет фиксированную ширину, альтернативным решением может быть создание View, которое будет выглядеть как подчеркивание, и расположить его прямо под 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>
...