2011-01-12 45 views
6

TextViewに完全に下線を付けるようにしたいが、それは動的テキストであるためテキストリソースと<u>タグを使用できない。Android:静的にTextViewの動的テキストに下線を付ける

関連:これまでのところCan I underline text in an android layout?

これを行うには、私が知っている唯一の方法は、実行時にあります。これは本当に唯一の方法ですか?私がXMLファイルでそれを行う方法はありますか?

答えて

18

最も簡単な解決策は、TextViewの由来カスタムUnderLineTextView・コンポーネントを作成するのsetText()をオーバーライドし、下線などテキスト全体を設定することが考えられ、このようなものです(上記のリンクの下線のコード)。

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

} 

これは単なるmaです新しいコンポーネントをレイアウトに使用し、テキストを通常どおりに設定します。残りは自動的に処理されます。カスタムコンポーネントの

さらに詳しい情報: http://developer.android.com/guide/topics/ui/custom-components.html

14

あなたはテキスト

Html.fromHtml(String source)以上の例を強調することができます

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

最も単純なソリューションIMHO。 – gnac

+0

」タグと「」タグの括弧がエスケープされていないため、これは機能しません。適切な例については、http://stackoverflow.com/a/9955051/425183 – Ognyan

+0

を参照してください実際には最も単純な解決法、txs – Hubert

1

ご希望の場合にも、/res/values/string.xmlファイルを経由してこれを行うことができます。たとえば、/res/values/string.xmlあなたに以下のようなエントリを追加することができます。

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

そして、あなたの活動ののonCreate(バンドルsavedInstanceState)メソッドでは、あなたは、「アカウントの作成」が発生し、次のコードを追加します>あなたが設定UIに下線として表示されるようにあなたの活動の/ res/layout /内のxmlファイルで定義したcreateAccountText TextView:

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

ダニー・レミントン - のTextViewクラスを拡張し、SetTextメソッドをオーバーライドする前にMacroSolve

+0

getResources()。getText()は私の問題を解決しました。なぜ 'textView.setText(getResources() ).getString(R.string.string_id)); 'テキストには下線が引かれていませんでした。 –

0

peter3は書いています。

このソリューションは、setTextメソッドがFINALとしてマークされているため、機能しません。コードはいくつかの変更で動作することができれば

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

わかりません。

+0

peter3が答えでオーバーライドするメソッドは、public final void setText(CharSequence text)ではなくpublic void setText(CharSequence text、TextView.BufferType type)です。ピーター3の方法は最終的なものではないと説明しています。 (少し遅れてコメントを追加しましたが、2度見なければなりませんでしたので、言及する価値があると思いました)。 – Stanley

0
SpannableString content = new SpannableString(name); 
content.setSpan(new UnderlineSpan(), 0, name.length(), 0); 
geometrical_textview.setText(content, TextView.BufferType.SPANNABLE); 
関連する問題