813 Stimmen

Kann ich Text in einem Android-Layout unterstreichen?

Wie kann ich definieren unterstrichen Text in einem Android-Layout xml Datei?

15voto

Ahsan Ullah Rasel Punkte 181

Wenn Sie dies erreichen wollen in XML deklarieren Sie Ihre Zeichenkette als Ressource und fügen Sie diesen Ressourcenwert in den Unterstreichungs-Tag (<u></u>) von HTML ein. in TextView, hinzufügen

android:text="@string/your_text_reference"

Und in String Ressource Wert,

<string name="your_text_reference"><u>Underline me</u></string>

Wenn Sie dies programmatisch erreichen wollen, können Sie für Kotlin verwenden.

textView.paintFlags = textView.paintFlags or Paint.UNDERLINE_TEXT_FLAG

oder,

textView.text = Html.fromHtml("<p><u>Underline me</u></p>")

11voto

Justin Punkte 6464

Ich weiß, dass dies eine späte Antwort ist, aber ich habe eine Lösung gefunden, die ziemlich gut funktioniert... Ich habe die Antwort von Anthony Forloney zum Unterstreichen von Text im Code genommen und eine Unterklasse von TextView erstellt, die das für Sie erledigt. Dann können Sie einfach die Unterklasse in XML verwenden, wenn Sie eine unterstrichene TextView haben wollen.

Hier ist die Klasse, die ich erstellt habe:

import android.content.Context;
import android.text.Editable;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;
import android.widget.TextView;

/**
 * Created with IntelliJ IDEA.
 * User: Justin
 * Date: 9/11/13
 * Time: 1:10 AM
 */
public class UnderlineTextView extends TextView
{
    private boolean m_modifyingText = false;

    public UnderlineTextView(Context context)
    {
        super(context);
        init();
    }

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

    public UnderlineTextView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init();
    }

    private void init()
    {
        addTextChangedListener(new TextWatcher()
        {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
                //Do nothing here... we don't care
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                //Do nothing here... we don't care
            }

            @Override
            public void afterTextChanged(Editable s)
            {
                if (m_modifyingText)
                    return;

                underlineText();
            }
        });

        underlineText();
    }

    private void underlineText()
    {
        if (m_modifyingText)
            return;

        m_modifyingText = true;

        SpannableString content = new SpannableString(getText());
        content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
        setText(content);

        m_modifyingText = false;
    }
}

Wenn Sie nun eine unterstrichene Textansicht in XML erstellen möchten, gehen Sie einfach wie folgt vor:

<com.your.package.name.UnderlineTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:gravity="center"
    android:text="This text is underlined"
    android:textColor="@color/blue_light"
    android:textSize="12sp"
    android:textStyle="italic"/>

Ich habe in diesem XML-Schnipsel zusätzliche Optionen hinzugefügt, um zu zeigen, dass mein Beispiel mit der Änderung von Textfarbe, -größe und -stil funktioniert...

Ich hoffe, das hilft!

11voto

Volodymyr Punkte 6115

Der jüngste Ansatz, unterstrichenen Text zu zeichnen, wird von Romain Guy beschrieben auf mittel mit verfügbarem Quellcode auf GitHub . In dieser Beispielanwendung werden zwei mögliche Implementierungen vorgestellt:

  • Eine pfadbasierte Implementierung, die API-Level 19 erfordert
  • Eine regionenbasierte Implementierung, die API-Ebene 1 erfordert

enter image description here

9voto

Khemraj Sharma Punkte 52006

Der einfachste Weg

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

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

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

Wenn Sie wollen

- Anklickbarer unterstrichener Text?

- Mehrere Teile einer TextView unterstreichen?

Dann Diese Antwort prüfen

8voto

Samuel Punkte 81

Ich habe dieses Xml-Drawable verwendet, um einen unteren Rand zu erstellen, und das Drawable als Hintergrund für mein Textview verwendet

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>

    <item android:top="-5dp" android:right="-5dp" android:left="-5dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                    android:width="1.5dp"
                    android:color="@color/pure_white" />
        </shape>
    </item>
</layer-list>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X