Domanda

Come si può definire sottolineato testo in un layout di Android xml il file?

È stato utile?

Soluzione

Può essere raggiunto se si utilizza un risorsa di tipo stringa file xml, che supporta i tag HTML come <b></b>, <i></i> e <u></u>.

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

Se si vuole sottolineare qualcosa da codice:

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

Altri suggerimenti

Si può provare con

textview.setPaintFlags(textview.getPaintFlags() |   Paint.UNDERLINE_TEXT_FLAG);

"Accettato" risposta di cui sopra non NON lavoro (quando si tenta di utilizzare la stringa come textView.setText(Html.fromHtml(String.format(getString(...), ...))).

Come indicato nel documentazione si deve scappare (entità html codificato) staffa di apertura interna con la tag con &lt;, ad es.il risultato dovrebbe assomigliare a questo:

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

Poi nel codice è possibile impostare il testo:

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(String.format(getString(R.string.my_string), ...)));

Strings.xml il contenuto di un file:

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

Layout xml file shold utilizzare la stringa di cui sopra risorsa con sotto la proprietà di una textview, come mostrato di seguito:

<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="@string/my_text"

    android:selectAllOnFocus="false"
    android:linksClickable="false"
    android:autoLink="all"
    />

Per il Pulsante e TextView questo è il modo più semplice:

Pulsante:

Button button = (Button) findViewById(R.id.btton1);
button.setPaintFlags(button.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

Textview:

TextView textView = (TextView) findViewById(R.id.textview1);
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

Una linea di soluzione

myTextView.setText(Html.fromHtml("<p><u>I am Underlined text</u></p>"));

È po ' in ritardo, ma potrebbe essere utile per qualcuno.

Il più recente approccio di disegno, testo sottolineato è descritto da Romain Ragazzo medio con codice sorgente disponibile su GitHub.Questa applicazione di esempio espone due possibili implementazioni:

  • Un Percorso basato attuazione che richiede API di livello 19
  • Una Regione a base di attuazione che richiede API di livello 1

enter image description here

In Kotlin funzione di estensione può essere utilizzato.Questo può essere utilizzato solo da codice, non xml.

fun TextView.underline() {
    paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
}

Utilizzo:

 tv_change_number.underline()
 tv_resend_otp.underline()

So che questo è un ritardo di risposta, ma ho trovato una soluzione che funziona abbastanza bene...Ho preso la risposta da Antonio Forloney per sottolineare il testo in codice e creato una sottoclasse di una TextView che gestisce per voi.Allora si può semplicemente utilizzare la sottoclasse in XML ogni volta che si desidera avere sottolineato TextView.

Qui è la classe che ho creato:

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;
    }
}

Ora...ogni volta che si desidera creare sottolineato textview in XML, basta effettuare le seguenti operazioni:

<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"/>

Ho aggiunto ulteriori opzioni in questo frammento di codice XML per dimostrare che il mio esempio funziona con la modifica del colore del testo, dimensione e stile...

Spero che questo aiuta!

controllare il sottolineato cliccabile stile del pulsante:

<TextView
    android:id="@+id/btn_some_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_add_contact"
    android:textAllCaps="false"
    android:textColor="#57a0d4"
    style="@style/Widget.AppCompat.Button.Borderless.Colored" />

strings.xml:

<string name="btn_add_contact"><u>Add new contact</u></string>

Risultato:

enter image description here

Un modo più pulito invece di
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); il metodo è quello di utilizzare textView.getPaint().setUnderlineText(true);

E se hai bisogno per poi spegnere sottolineando che per vista, come in un riutilizzato vista in un RecyclerView, textView.getPaint().setUnderlineText(false);

Basta usare l'attributo nel file di risorse di stringa ad es.

<string name="example"><u>Example</u></string>

Ho usato questo codice xml drawable per creare un fondo di confine e applicata dell'immagine come sfondo per il mio textview

<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>

Una soluzione semplice e flessibile in xml:

<View
  android:layout_width="match_parent"
  android:layout_height="3sp"
  android:layout_alignLeft="@+id/your_text_view_need_underline"
  android:layout_alignRight="@+id/your_text_view_need_underline"
  android:layout_below="@+id/your_text_view_need_underline"
  android:background="@color/your_color" />

Accidenti, è più semplice da usare

TextView tv = findViewById(R.id.tv);
tv.setText("some text");

Sottolineare tutta la TextView

setUnderLineText(tv, tv.getText().toString());

La sottolineatura da parte di alcune TextView

setUnderLineText(tv, "some");

Anche il supporto di una TextView childs come EditText, Pulsante, Casella di controllo

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

controllare la mia risposta qui per rendere cliccabile sottolineare il testo o la sottolineatura più parti di una TextView

un'altra soluzione è creare una visualizzazione personalizzata che si estendono TextView, come illustrato di seguito

public class UnderLineTextView extends TextView {

    public UnderLineTextView(Context context) {
        super(context);
        this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
    }

    public UnderLineTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
    }

}

e basta aggiungere al codice xml come illustrato di seguito

<yourpackage.UnderLineTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="underline text"
 />

prova questo codice

in XML

<resource>
 <string name="my_text"><![CDATA[This is an <u>underline</u>]]></string> 
</resources> 

nel Codice

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

Buona Fortuna!

Ho semplificato Samuel's risposta:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--https://stackoverflow.com/a/40706098/4726718-->
    <item
        android:left="-5dp"
        android:right="-5dp"
        android:top="-5dp">
        <shape>
            <stroke
                android:width="1.5dp"
                android:color="@color/colorAccent" />
        </shape>
    </item>
</layer-list>
  1. Vai a strings.xml file di risorse
  2. Aggiungere una stringa nel file di risorse con un HTML tag sottolineato ove necessario.

strings.xml HTML sottolineare campione

  1. Chiamare la stringa di ID di risorsa nel codice Java come segue:
sampleTextView.setText(R.string.sample_string);
  1. L'output deve essere la parola "Stackoverflow", ha sottolineato.

Inoltre, il codice riportato di seguito non stampa la sottolineatura:

String sampleString = getString(R.string.sample_string);
sampleTextView.setText(sampleString);

Invece, utilizzare il codice seguente per mantenere il formato rtf:

CharSequence sampleString = getText(R.string.sample_string);
sampleTextView.setText(sampleString);

"È possibile utilizzare il metodo getString(int) o getText(int) per recuperare una stringa.getText(int) mantiene ricco di qualsiasi testo styling applicate alla stringa." Android documentazione.

Fare riferimento alla documentazione: https://developer.android.com/guide/topics/resources/string-resource.html

Spero che questo aiuta.

Il top votato risposta è giusta e più semplice.A volte, tuttavia, si potrebbe scoprire che non funziona per un certo tipo di carattere, ma di lavorare per gli altri.(Che problema ho appena incontrato quando ha a che fare con i Cinesi.)

La soluzione è non usare "WRAP_CONTENT" solo per il tuo TextView, causa non c'è più spazio per disegnare la linea.È possibile impostare altezza fissa per il TextView, o usare android:paddingVertical con WRAP_CONTENT.

HtmlCompat.fromHtml(
                    String.format(context.getString(R.string.set_target_with_underline)),
                    HtmlCompat.FROM_HTML_MODE_LEGACY)
<string name="set_target_with_underline">&lt;u>Set Target&lt;u> </string>

Nota la Fuga simbolo nel file xml

Ho avuto un problema in cui sto utilizzando un tipo di carattere personalizzato e la sottolineatura creato con il file di risorse trucco (<u>Underlined text</u>) ha fatto il lavoro, ma Android è riuscito a trasformare la sottolineatura di una sorta di sciopero trogolo.

Ho usato questa risposta per disegnare un bordo sotto la textview me: https://stackoverflow.com/a/10732993/664449.Ovviamente questo non funziona per parziale del testo sottolineato o multilined testo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top