Wie kann ich definieren unterstrichen Text in einem Android-Layout xml
Datei?
Antworten
Zu viele Anzeigen?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>")
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!
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
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
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>