So zeichnen Sie eine Unterstreichung unter der Textansicht in Android


Antworten:


323

Es gibt drei Möglichkeiten, den Text in TextView zu unterzeichnen.

  1. SpannableString

  2. setPaintFlags (); von TextView

  3. Html.fromHtml ();

Lassen Sie mich Ihnen alle Ansätze erklären:

1. Ansatz

Um den Text in TextView zu unterzeichnen, müssen Sie SpannableString verwenden

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

2. Ansatz

Sie können die setPaintFlags- Methode von TextView verwenden, um den Text von TextView zu unterstreichen.

Zum Beispiel.

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

Sie können Konstanten der Paint- Klasse referenzieren, wenn Sie durch den Text streichen möchten.

3. Ansatz

Gebrauch machen von Html.fromHtml(htmlString);

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

ODER

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

1
Freut mich das zu hören. Markieren Sie diese Frage als gelöst, damit andere Benutzer darauf verweisen können.
— Kartik Domadiya

4
Ein dritter Ansatz wäre die Verwendung Html.fromHtml("<u>This text will be underlined</u>"), aber ich muss zugeben, dass ich ein viel größerer Fan von SpannableStrings bin. @Kartik: Sie können auch ein StrikethroughSpanTextzeichen verwenden, um den Durchgestrichen-Effekt zu erzielen. :)
— MH.

Ich liebe den 3. Ansatz. Kurz, einfach und prägnant und fügt meinem Programm nur eine zusätzliche Codezeile hinzu.
— Matt

Ich weiß, dass dies ein bisschen alt ist, aber gibt es eine Möglichkeit, die Dicke der Unterstreichung einzustellen?
— Andreas Wong

Welche davon wird für den Inhalt von priorityActivity in der Kategorie PreferenceCategory verwendet?
— Android-Entwickler

40

Umgeben Sie Ihren Text einfach mit dem <u> -Tag in Ihrer Ressourcendatei string.xml

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

und in Ihrer Aktivität / Fragment

mTextView.setText(R.string.your_string);

7
@CHAKRAVARTHI Es funktioniert nicht, wenn Sie den Text vor dem Festlegen in einen String umwandeln. ZB textView.setText(getString(R.string.text)) <- falsch . Richtig: textView.setText(getText(R.string.text)) oder einfach textView.setText(R.string.text). Der Grund beind dies , dass getText()Renditen Spannablemit Unterstrichen Spannweiten, aber wenn Sie verwenden getString()es wird die konvertieren Spannablezu Stringresultierenden Spannweiten entfernt werden.
— Jaroslaw Mytkalyk

guter Punkt! Ich habe meine aktuelle Antwort bearbeitet, um klarer zu sein
— Sarpe

19

Es funktioniert für mich.

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);

11

Für alle, die sich diese Frage noch ansehen. Dies ist für einen Hyperlink, aber Sie können ihn nur für eine einfache Unterstreichung ändern:

Erstellen Sie eine Zeichnungsdatei (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>

Erstellen Sie einen neuen Stil:

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

Verwenden Sie dann diesen Stil in Ihrer Textansicht:

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

3

Wenn Ihre TextView eine feste Breite hat, kann eine alternative Lösung darin bestehen, eine Ansicht zu erstellen, die wie eine Unterstreichung aussieht, und sie direkt unter Ihrer TextView zu positionieren.

<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

Eine einfache und nachhaltige Lösung besteht darin, eine Ebenenliste zu erstellen und als Hintergrund für Ihre Textansicht zu verwenden:

<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
Dies ist die beste Wahl, wenn es sich um eine einzeilige Textansicht handelt
— hushed_voice

0

unterstreiche eine Textansicht in Android

5 erstaunliche Möglichkeiten, eine Textansicht in Android - Kotlin / Java & XML zu unterstreichen

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

Aber Html.fromHtml (String Ressource) wurde in API 24 als veraltet.

So können Sie die neueste Android-Support-Bibliothek androidx.core.text.HtmlCompat verwenden . Zuvor müssen Sie die Abhängigkeit in Ihr Projekt aufnehmen.

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

Verwenden von 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));

mit PaintFlags

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

mit SpannableString

`String content1 = "3.1 Underline using SpannableString";
        SpannableString spannableString1 = new SpannableString(content1);
        spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
        textview31.setText(spannableString1);`
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.