Wie unterstreicht man einen Text in Android XML?


Antworten:


174

Wenn Sie eine Zeichenfolge - Ressource XML - Datei (unterstützt HTML - Tags) verwenden, können sie mit Hilfe getan werden <b> </b>, <i> </i>und <u> </u>.

<resources>
    <string name="your_string_here">
        This is an <u>underline</u>.
    </string>
</resources>

Wenn Sie etwas aus dem Code hervorheben möchten, verwenden Sie:

TextView tv = (TextView) view.findViewById(R.id.tv);
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
tv.setText(content);

Hoffe das hilft


9
Ich habe es versucht. die Saite wird nicht unterstrichen?
Michael Zeuner

5
Ich bin auf Fälle gestoßen, in denen das Durchlaufen von <u>Tags nicht funktioniert, z. B. manchmal, wenn Sie eine benutzerdefinierte Schriftart verwenden. Das programmatische Grundlegen von UnderlineSpanist mir jedoch nie gescheitert, daher würde ich es als die zuverlässigste Lösung empfehlen.
Giulio Piancastelli

Sie müssen keinen Text in Java festlegen. Verwenden Sie einfach <u>und <\u>in XML, und es ist genug.
Maksim Dmitriev

9
In meinem Fall konnte Android Studio Preview das HTML-Tag nicht ermitteln. aber sobald ich das Projekt in einem realen Gerät ausgeführt habe, wird unterstrichener Text glücklich angezeigt.
Alvin

1
<jammern> Die Tatsache, dass Sie eine Zeichenfolge in HTML konvertieren müssen, wenn Google uns bereits fett / kursiv / normal gibt, ist ziemlich locker, wenn man bedenkt, dass wir seit über 5 Jahren Android haben ... </
whine

57

Benutze das:

TextView txt = (TextView) findViewById(R.id.Textview1);
txt.setPaintFlags(txt.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

Beachten Sie, dass diese Lösung immer den gesamten Text unterstreicht. Daher ist es nicht möglich, nur einen Teil davon zu unterstreichen. Dafür brauchen Sie UnderlineSpan.
Giulio Piancastelli

25
<resource>
    <string name="your_string_here">This is an <u>underline</u>.</string>
</resources>

Wenn es dann nicht funktioniert

<resource>
<string name="your_string_here">This is an &lt;u>underline&lt;/u>.</string>

Weil "<" irgendwann ein Schlüsselwort sein könnte.

Und zum Anzeigen

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(getString(R.string.your_string_here)));

3
Dies funktioniert ... aber wenn Sie aus irgendeinem Grund die Textansicht so einstellen, dass sie das XML-Attribut android: textAllCaps = "true" verwendet, wird die Unterstreichung nicht angezeigt. Entfernen Sie diesen Modifikator und die Unterstreichung wird wie vorgesehen angezeigt. Nur ein Kopf hoch :)
Matt W

5

Wechseln Sie zunächst zur Datei String.xml

Sie können hier beliebige HTML-Attribute wie kursiv oder fett oder unterstrichen hinzufügen.

    <resources>
        <string name="your_string_here">This is an <u>underline</u>.</string>
    </resources>

3

Eine andere Möglichkeit besteht darin, eine benutzerdefinierte Komponente zu erstellen, die TextView erweitert. Dies ist gut für Fälle geeignet, in denen mehrere unterstrichene Textansichten erforderlich sind.

Hier ist der Code für die Komponente:

package com.myapp.components;

import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;

public class LinkTextView extends AppCompatTextView {
    public LinkTextView(Context context) {
        this(context, null);
    }

    public LinkTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        SpannableString content = new SpannableString(text);
        content.setSpan(new UnderlineSpan(), 0, content.length(), 0);

        super.setText(content, type);
    }
}

Und wie man es in XML verwendet:

<com.myapp.components.LinkTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hello World!" />


2

Sie können das folgende Markup verwenden. Beachten Sie jedoch, dass der Effekt "Unterstreichen" entfernt wird , wenn Sie ihn textAllCapsauf " trueUnterstreichen" setzen.

<resource>
    <string name="my_string_value">I am <u>underlined</u>.</string>
</resources>


Hinweis

Verwenden von textAllCaps mit einer Zeichenfolge (login_change_settings), die Markup enthält; Das Markup wird durch die Caps-Konvertierung gelöscht

Die Texttransformation textAllCaps ruft am Ende toString für die CharSequence auf, was den Nettoeffekt hat, Markups wie z. Diese Prüfung sucht nach Verwendungen von Zeichenfolgen, die Markups enthalten, die auch textAllCaps = true angeben.


2

Es gibt verschiedene Möglichkeiten, unterstrichenen Text in einer Android-Textansicht zu erzielen.

1. <u>This is my underlined text</u> oder

I just want to underline <u>this</u> word

2. Sie können das gleiche programmgesteuert tun.

`textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);`

3. Sie können dazu einen SpannableString erstellen und ihn dann als TextView-Texteigenschaft festlegen

SpannableString text = new SpannableString("Voglio sottolineare solo questa parola");
text.setSpan(new UnderlineSpan(), 25, 6, 0);
textView.setText(text);

2

Ich habe die folgende Methode verwendet, es hat bei mir funktioniert. Unten finden Sie ein Beispiel für Button, das wir jedoch auch in TextView verwenden können.

Button btnClickMe = (Button) findViewById(R.id.btn_click_me);
btnClickMe.setPaintFlags(btnClickMe.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

1

Wenn Sie eine Textzeichenfolge vergleichen möchten oder sich der Text dynamisch ändert, können Sie eine Ansicht im Einschränkungslayout erstellen, die entsprechend der Textlänge wie folgt angepasst wird

 <android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txt_Previous"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="8dp"
        android:gravity="center"
        android:text="Last Month Rankings"
        android:textColor="@color/colorBlue"
        android:textSize="15sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <View
        android:layout_width="0dp"
        android:layout_height="0.7dp"
        android:background="@color/colorBlue"
        app:layout_constraintEnd_toEndOf="@+id/txt_Previous"
        app:layout_constraintStart_toStartOf="@+id/txt_Previous"
        app:layout_constraintBottom_toBottomOf="@id/txt_Previous"/>


</android.support.constraint.ConstraintLayout>

0
public void setUnderLineText(TextView tv, String textToUnderLine) {
        String tvt = tv.getText().toString();
        int ofe = tvt.indexOf(textToUnderLine, 0);

        UnderlineSpan underlineSpan = new UnderlineSpan();
        SpannableString wordToSpan = new SpannableString(tv.getText());
        for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
            ofe = tvt.indexOf(textToUnderLine, ofs);
            if (ofe == -1)
                break;
            else {
                wordToSpan.setSpan(underlineSpan, ofe, ofe + textToUnderLine.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);
            }
        }
    }

Einfachster Weg

TextView tv = findViewById(R.id.tv);
tv.setText("some text");
setUnderLineText(tv, "some");

Unterstützt auch TextView-Childs wie EditText, Button, Checkbox

Falls Sie es wollen

- Klickbarer Unterstreichungstext?

- Unterstreichen Sie mehrere Teile von TextView?

Dann prüfen Sie diese Antwort

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.