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"));
Kartik Domadiya
quelle
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);
Sarpe
quelle
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);
Mani
quelle
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"/>
Daniel
quelle
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>
Lera
quelle
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>
Darush
quelle
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);`
Vijay Ram
quelle