Quiero dibujar el subrayado debajo de mi TextView
. He buscado algunos contenidos pero no pude encontrar nada fructífero.
¿Alguien puede ayudarme aquí?
Quiero dibujar el subrayado debajo de mi TextView
. He buscado algunos contenidos pero no pude encontrar nada fructífero.
¿Alguien puede ayudarme aquí?
Respuestas:
Hay tres formas de subrayar el texto en TextView.
setPaintFlags (); de TextView
Déjame explicarte todos los enfoques:
1er Enfoque
Para subrayar el texto en TextView, debe usar SpannableString
String udata="Underlined Text";
SpannableString content = new SpannableString(udata);
content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
mTextView.setText(content);
2do enfoque
Puede hacer uso del método setPaintFlags de TextView para subrayar el texto de TextView.
Por ej.
mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mTextView.setText("This text will be underlined");
Puede consultar las constantes de la clase Paint si desea tachar el texto.
3er Enfoque
Hacer uso de Html.fromHtml(htmlString);
String htmlString="<u>This text will be underlined</u>";
mTextView.setText(Html.fromHtml(htmlString));
O
txtView.setText(Html.fromHtml("<u>underlined</u> text"));
Html.fromHtml("<u>This text will be underlined</u>")
, pero debo admitir que soy un fan mucho más grande del uso de SpannableStrings. @Kartik: También puede usar un StrikethroughSpan
en el texto para crear el efecto de tachado. :)
simplemente rodee su texto con la etiqueta <u> en su archivo de recursos string.xml
<string name="your_string"><u>Underlined text</u></string>
y en tu Actividad / Fragmento
mTextView.setText(R.string.your_string);
textView.setText(getString(R.string.text))
<- incorrecto . Correcto: textView.setText(getText(R.string.text))
o simplemente textView.setText(R.string.text)
. La razón detrás de esto es que getText()
regresa Spannable
con tramos subrayados, pero si lo usa getString()
, convertirá el Spannable
en String
tramos resultantes que se eliminarán.
Para cualquiera que todavía esté mirando esta pregunta. Esto es para un hipervínculo, pero puede modificarlo solo para un subrayado simple:
Cree un elemento dibujable (hyperlink_underline.xml):
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-10dp"
android:left="-10dp"
android:right="-10dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
<stroke android:width="2dp"
android:color="#3498db"/>
</shape>
</item>
</layer-list>
Crea un nuevo estilo:
<style name="Hyperlink">
<item name="android:textColor">#3498db</item>
<item name="android:background">@drawable/hyperlink_underline</item>
</style>
Luego use este estilo en su TextView:
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
local:MvxBind="Text Id; Click ShowJobInfoCommand"
style="@style/HyperLink"/>
Si su TextView tiene un ancho fijo, la solución alternativa puede ser crear una Vista que se verá como un subrayado y colocarla justo debajo de su TextView.
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/myTextView"
android:layout_width="20dp"
android:layout_height="wrap_content"/>
<View
android:layout_width="20dp"
android:layout_height="1dp"
android:layout_below="@+id/myTextView"
android:background="#CCCCCC"/>
</RelativeLayout>
Una solución simple y sostenible es crear una lista de capas y convertirla en el fondo de su TextView:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="-5dp"
android:right="-5dp"
android:top="-5dp">
<shape>
<stroke
android:width="1.5dp"
android:color="@color/colorAccent" />
</shape>
</item>
</layer-list>
5 formas asombrosas de subrayar un TextView en Android: Kotlin / Java y XML
String html = "<u>Underline using Html.fromHtml()</u>";
textview.setText(Html.fromHtml(html));
Pero Html.fromHtml (recurso String) quedó obsoleto en API 24.
Para que pueda usar la última biblioteca de soporte de Android androidx.core.text.HtmlCompat . Antes de eso, debe incluir la dependencia en su proyecto.
`implementation 'androidx.core:core:1.0.1'`
String html = "<u> 1.1 Underline using HtmlCompat.fromHtml()</u>";
//underline textview using HtmlCompat.fromHtml() method
textview11.setText(HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_LEGACY));
Usando strings.xml ,
<string name="underline_text">1.3 <u>Underline using HtmlCompat.fromHtml() and string resource</u></string>
textview13.setText(HtmlCompat.fromHtml(getString(R.string.underline_text), HtmlCompat.FROM_HTML_MODE_LEGACY));
usando PaintFlags
textview2.setPaintFlags(textview2.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
textview2.setText("2. Underline using setPaintFlags()");
usando SpannableString
`String content1 = "3.1 Underline using SpannableString";
SpannableString spannableString1 = new SpannableString(content1);
spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
textview31.setText(spannableString1);`