2011-01-12 33 views
6

'da dinamik metnin statik olarak altının çizilmesi Tamamen altı çizilebilecek bir TextView oluşturmak istiyorum ancak dinamik metin olduğu için bir metin kaynağı ve <u> etiketini kullanamıyorum.Android: TextView

İlgili:

Can I underline text in an android layout? Şimdiye kadar tek yolu bu çalışma zamanında yapmanın biliyorum. Bu gerçekten tek yol mu? XML dosyalarında yapabileceğim bir yol var mı?

cevap

18

kolay çözüm, TextView doğan özel UnderLineTextView bileşeni oluşturmak setText() geçersiz kılmak ve altı çizili olarak tüm metnini ayarlamak için muhtemelen, Bunun gibi bir şey (yukarıda bahsettiğiniz bağlantıdan altını çizin):

Yeni bileşeninizi düzende kullanma ve metni her zamanki gibi ayarlama. Gerisi otomatik olarak ele alınır. özel bileşenleri üzerinde

diğer bilgiler: İsterseniz http://developer.android.com/guide/topics/ui/custom-components.html

14

Metin

Html.fromHtml(String source) üzerinde Örnek altını çizebilirsiniz:

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

En basit çözüm IMHO. – gnac

+0

Bu işlem işe yaramaz çünkü '' ve '' etiketlerinin açılışı atılmıyor. Doğru örnek için lütfen bkz http://stackoverflow.com/a/9955051/425183 – Ognyan

+0

gerçekten En basit çözüm, txs – Hubert

1

Ayrıca /res/values/string.xml dosyası üzerinden bunu yapabilirsiniz: Örneğin, /res/values/string.xml sen için belirlediğiniz kullanıcı arayüzünde altını olarak görünmesini> neden "Hesap oluştur" için aşağıdaki kodu eklersiniz etkinlik onCreate (Bundle savedInstanceState) yönteminde

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

Ve sonra: gibi bir girdi ekleyebilirsiniz etkinliğiniz için/res/layout/dizinindeki xml dosyasında tanımladığınız 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); 

Danny Remington - TextView'un sınıfını genişletmek ve setText yöntem geçersiz kılmak için önce MacroSolve

+0

getResources(). GetText() benim sorunumu çözdü, neden bir textView.setText (getResources() ile bilmiyorum .getString (R.string.string_id)); 'metnin altı çizilemedi. –

0

Peter3 yazdı.

Bu çözüm setText yöntemi FINAL olarak işaretlendiğinden çalışmaz. Kod bazı değişikliklerle işe yarayabilir eğer

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

emin değilim.

+0

Peter3'ün yanıtında geçersiz kılma yöntemi, public final void setText (CharSequence metni) değil, public void setText (CharSequence metni, TextView.BufferType türü) değildir. Peter3 tarif eden yöntem son değil. (Yorum eklemek için biraz geç ama aynı zamanda iki kere bakmam gerekiyordu, bu yüzden bahsetmeye değerdi). – Stanley

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