2012-04-04 23 views
71

Jak można podkreślić tekst w pliku XML? Nie mogę znaleźć opcji w textStyle.Jak można podkreślić tekst w Androidzie XML?

+0

u trzeba spróbować użyć 'style = "text-decoration: podkreślenia;"' –

+0

mogłyby powinieneś w pełni to wykorzystać? –

+0

spróbuj tego 'textView.setText (Html.fromHtml (" "+" testest "+" "));' –

Odpowiedz

114

Jeśli używasz pliku xml zasobów ciągu (obsługuje znaczniki HTML), można to zrobić, używając <b> </b>, <i> </i> i <u> </u>.

<resources> 
    <string name="your_string_here"> 
     This is an <u>underline</u>. 
    </string> 
</resources> 

Jeśli chcesz podkreślić coś z wykorzystania kodu:

TextView tv = (TextView) view.findViewById(R.id.tv); 
SpannableString content = new SpannableString("Content"); 
content.setSpan(new UnderlineSpan(), 0, content.length(), 0); 
tv.setText(content); 

nadzieję, że to pomaga

+5

Próbowałem tego. ciąg nie jest podkreślony? –

+0

czy możesz podać mi przypadek użycia? –

+3

Natknąłem się na przypadki, gdy ukryte w tagach '' nie działa, np. czasami, jeśli używasz niestandardowej czcionki. Jednak programowo bazujący na 'UnderlineSpan' rzeczywiście nigdy nie zawiodł na mnie, więc polecam go jako najbardziej niezawodne rozwiązanie. –

17
<resource> 
    <string name="your_string_here">This is an <u>underline</u>.</string> 
</resources> 

Jeśli to nie poskutkuje, to

<resource> 
<string name="your_string_here">This is an &lt;u>underline&lt;/u>.</string> 

Ponieważ "<" może być słowem kluczowym w pewnym momencie.

I Wyświetlanie

TextView textView = (TextView) view.findViewById(R.id.textview); 
textView.setText(Html.fromHtml(getString(R.string.your_string_here))); 
+0

Działa na poczęstunek, dziękuje –

+1

To działa ... ale jeśli z jakiegoś powodu ustawisz TextView na użycie atrybutu xml android: textAllCaps = "true", podkreślenie nie pojawi się. Usuń ten modyfikator, a podkreślenie zostanie wyświetlone zgodnie z przeznaczeniem. Tylko główka :) –

40

użyj:

TextView txt = (TextView) findViewById(R.id.Textview1); 
txt.setPaintFlags(txt.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 
+0

Pamiętaj, że to rozwiązanie zawsze podkreśla cały tekst, więc nie jest możliwe, aby podkreślić tylko jego część. Do tego potrzebny jest 'UnderlineSpan'. –

+2

To jest najbardziej elegancka odpowiedź na podkreślenie całego tekstu: – voghDev

2

Przede wszystkim iść do String.xml plikowi

można dodawać żadnych atrybutów HTML jak, kursywa czy pogrubienie lub podkreślenie tutaj.

+1

To już zostało wyjaśnione powyżej. – Shygar

0

Użyłem poniżej metody, to jest praca dla mnie. poniżej jest przykład dla przycisku, ale możemy również użyć w TextView.

Button btnClickMe= (Button) findViewById(R.id.btn_click_me); 
btnClickMe.setPaintFlags(btnClickMe.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); 
0

Można użyć poniższego znaczników, ale należy pamiętać, że jeśli ustawić textAllCaps do true efekt podkreślenia zostaną usunięte.

<resource> 
    <string name="my_string_value">I am <u>underlined</u>.</string> 
</resources> 


Uwaga

Korzystanie textAllCaps sznurkiem (login_change_settings), który zawiera znaczników; znaczniki zostaną porzucone przez konwersję konektorów

Transformacja tekstu tekstowego spowoduje wywołanie doString na CharSequence, który ma efekt netto usunięcia wszelkich znaczników, takich jak. Ta kontrola wyszukuje zastosowania ciągów zawierających znaczniki, które również określają tekstAllCaps = true.

2

Innym sposobem na to jest utworzenie niestandardowego komponentu rozszerzającego TextView.Jest to dobre rozwiązanie w przypadkach, gdy potrzebujesz wielu podkreślonych widoków tekstu.

Oto kod dla komponentu:

package com.myapp.components; 

import android.content.Context; 
import android.support.v7.widget.AppCompatTextView; 
import android.text.SpannableString; 
import android.text.style.UnderlineSpan; 
import android.util.AttributeSet; 

public class LinkTextView extends AppCompatTextView { 
    public LinkTextView(Context context) { 
     this(context, null); 
    } 

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

    @Override 
    public void setText(CharSequence text, BufferType type) { 
     SpannableString content = new SpannableString(text); 
     content.setSpan(new UnderlineSpan(), 0, content.length(), 0); 

     super.setText(content, type); 
    } 
} 

A jak go używać w xml:

<com.myapp.components.LinkTextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello World!" /> 
Powiązane problemy