2011-01-12 7 views

Antwort

18

Die einfachste Lösung wahrscheinlich eine benutzerdefinierte UnderLineTextView Komponente von Textview abzuleiten, außer Kraft setzen setText() und den gesamten Text als unterstrichen gesetzt zu schaffen, so etwas wie diese (unterstreichen Code aus dem Link auf die oben Bezug genommen):

@Override 
public void setText(CharSequence text, BufferType type) { 
    // code to check text for null omitted 
    SpannableString content = new SpannableString(text); 
    content.setSpan(new UnderlineSpan(), 0, text.length(), 0); 
    super.setText(content, BufferType.SPANNABLE); 

} 

Es ist dann nur ein ma Wenn Sie Ihre neue Komponente im Layout verwenden und den Text wie gewohnt einstellen möchten. Der Rest wird automatisch erledigt.

Weitere Informationen über benutzerdefinierte Komponenten: http://developer.android.com/guide/topics/ui/custom-components.html

14

Sie Text über Html.fromHtml(String source)

Beispiel unterstreichen kann:

textView.setText(Html.fromHtml("this is <u>underlined</u> text")); 
+0

Einfachste Lösung IMHO. – gnac

+0

Dies funktioniert nicht, da die öffnende Klammer der '' und '' Tags nicht maskiert ist. Für richtiges Beispiel bitte http://stackoverflow.com/a/9955051/425183 – Ognyan

+0

in der Tat einfachste Lösung, txs – Hubert

1

Sie können auch über die /res/values/string.xml Datei dies tun, wenn Sie es vorziehen: Zum Beispiel, in dem /res/values/string.xml Sie könnte einen Eintrag hinzufügen:

<string name="createAccount"><u>Create Account</u></string> 

Und dann im onCreate (Bundle savedInstanceState) Methode Ihrer Aktivität, die Sie den folgenden Code hinzufügen, würde dazu führen, „Konto erstellen“> erscheinen wie in der Benutzeroberfläche unterstrichen, die Sie festlegen die createAccountText TextView, die Sie in der XML-Datei in/res/layout/für Ihre Aktivität definiert haben:

TextView createAccountText = (TextView) findViewById(R.id.createAccountText); 
Resources res = getResources(); 
CharSequence styledText = res.getText(R.string.createAccount); 
createAccountText.setText(styledText, TextView.BufferType.SPANNABLE); 

Danny Remington - MacroSolve

+0

getResources(). GetText() löste mein Problem, weiß nicht warum mit einem 'textView.setText (getResources()) .getString (R.string.string_id)); 'Der Text wurde nicht unterstrichen. –

0

peter3 schrieb vor Textview-Klasse und überschreiben setText Methode zu erweitern.

Diese Lösung funktioniert nicht, da die setText-Methode als FINAL markiert ist.

http://developer.android.com/reference/android/widget/TextView.html#setText(java.lang.CharSequence)

nicht sicher, ob der Code mit einigen Modifikationen funktionieren könnte.

+0

Die Methode, die peter3 in seiner Antwort überschreibt, ist nicht public final void setText (CharSequence-Text), sondern public void setText (CharSequence-Text, TextView.BufferType-Typ). Die Methode, die peter3 beschreibt, ist nicht endgültig. (Ein bisschen spät, um den Kommentar hinzuzufügen, aber ich musste auch zweimal schauen, also dachte, es ist erwähnenswert). – Stanley

0
SpannableString content = new SpannableString(name); 
content.setSpan(new UnderlineSpan(), 0, name.length(), 0); 
geometrical_textview.setText(content, TextView.BufferType.SPANNABLE); 
Verwandte Themen