Aby narysować podkreślenie poniżej TextView w systemie Android


Odpowiedzi:


323

Istnieją trzy sposoby podkreślania tekstu w TextView.

  1. SpannableString

  2. setPaintFlags (); TextView

  3. Html.fromHtml ();

Pozwól, że wyjaśnię ci wszystkie podejścia:

Podejście 1

Aby podświetlić tekst w TextView, musisz użyć SpannableString

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

Podejście 2

Możesz skorzystać z metody setPaintFlags TextView , aby podkreślić tekst TextView.

Np.

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

Możesz odwołać się do stałych klasy Paint, jeśli chcesz przekreślić tekst.

Trzecie podejście

Zrobić użytek z Html.fromHtml(htmlString);

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

LUB

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

1
Miło mi to słyszeć… Oznacz to pytanie jako rozwiązane, aby inni użytkownicy mogli je polecić.
Kartik Domadiya

4
Html.fromHtml("<u>This text will be underlined</u>")Przydałoby się trzecie podejście , ale muszę przyznać, że jestem znacznie większym fanem używania SpannableStrings. @Kartik: Równie dobrze możesz użyć znaku StrikethroughSpanw tekście, aby stworzyć efekt przekreślenia. :)
MH.

Uwielbiam trzecie podejście. Krótki, prosty i zwięzły oraz dodaje tylko jedną dodatkową linię kodu do mojego programu.
Matt,

Wiem, że to trochę stare, ale czy istnieje sposób na ustawienie grubości podkreślenia?
Andreas Wong,

która z nich jest używana dla zawartości preferencjiActivity w kategorii PreferenceCategory?
programista Androida

40

po prostu otocz swój tekst znacznikiem <u> w pliku zasobów string.xml

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

oraz w swojej aktywności / fragmencie

mTextView.setText(R.string.your_string);

7
@CHAKRAVARTHI to nie zadziała, jeśli przerzucisz tekst na ciąg przed ustawieniem. Np. textView.setText(getString(R.string.text)) <- źle . Racja: textView.setText(getText(R.string.text)) lub po prostu textView.setText(R.string.text). Powodem beind to, że getText()wraca Spannablez podkreślają przęseł, ale jeśli używasz getString()to przekonwertować Spannabledo Stringwynikających przęseł zostanie usunięty.
Yaroslav Mytkalyk

Słuszna uwaga! Zredagowałem moją obecną odpowiedź, aby była bardziej przejrzysta
Sarpe

19

U mnie to działa.

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);

11

Dla każdego, kto wciąż patrzy na to pytanie. To jest dla hiperłącza, ale możesz je zmodyfikować, aby uzyskać zwykłe podkreślenie:

Utwórz do rysowania (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>

Utwórz nowy styl:

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

Następnie użyj tego stylu w swoim TextView:

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

3

Jeśli Twój TextView ma stałą szerokość, alternatywnym rozwiązaniem może być utworzenie widoku, który będzie wyglądał jak podkreślenie i umieszczenie go bezpośrednio pod 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

Prostym i trwałym rozwiązaniem jest utworzenie listy warstw i ustawienie jej jako tła dla 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
Jest to najlepszy wybór, jeśli jest to jednowierszowy
widok tekstu

0

podkreśl widok tekstu w systemie Android

5 niesamowitych sposobów podkreślenia TextView w Androidzie - Kotlin / Java i XML

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

Ale Html.fromHtml (zasób String) został wycofany w API 24.

Możesz więc skorzystać z najnowszej biblioteki obsługi Androida androidx.core.text.HtmlCompat . Wcześniej musisz uwzględnić zależność w swoim projekcie.

`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));

Używając 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));

używając PaintFlags

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

przy użyciu SpannableString

`String content1 = "3.1 Underline using SpannableString";
        SpannableString spannableString1 = new SpannableString(content1);
        spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
        textview31.setText(spannableString1);`
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.