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.