Wie unterstreicht man einen Text in Android XML?

108

Wie unterstreichen Sie einen Text in einer XML-Datei? Ich kann keine Option in finden textStyle.

Michael Zeuner
quelle
Sie haben versucht, mitstyle="text-decoration: underline;"
ρяσssρєя K
1
Könnten Sie in vollem Umfang wissen, wie man das benutzt?
Michael Zeuner
Sie haben versucht, diestextView.setText(Html.fromHtml("<u>"+"testest"+"</u>"));
ρяσsρєя K

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

George Artemiou
quelle
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);
abh22ishek
quelle
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)));
Bhavin
quelle
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>
Zar E Ahmer
quelle
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!" />
Tharkius
quelle
2

Um die Antwort von Bhavin zu vervollständigen. Zum Beispiel, um Unterstreichung oder Umleitung hinzuzufügen.

((TextView) findViewById(R.id.tv_cgu)).setText(Html.fromHtml(getString(R.string.upload_poi_CGU)));

<string name="upload_poi_CGU"><![CDATA[ J\'accepte les <a href="">conditions générales</a>]]></string>

und Sie können kompatibles Tag hier kennen: http://commonsware.com/blog/Android/2010/05/26/html-tags-supported-by-textview.html

Anthone
quelle
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.

Tebo
quelle
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);
Anandharaj R.
quelle
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);
Hitesh Dhamshaniya
quelle
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>
MazRoid
quelle
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

Khemraj
quelle