Hoe kan ik onderstreepte tekst in een Android-lay-out definiëren xml
Bestand?
Antwoord 1, Autoriteit 100%
Het kan worden bereikt als u een gebruikt String Resource XML-bestand, dat HTML-tags zoals <b></b>
, <i></i>
en <u></u>
.
<resources>
<string name="your_string_here">This is an <u>underline</u>.</string>
</resources>
Als u iets wilt onderstrepen van CODE-GEBRUIK:
TextView textView = (TextView) view.findViewById(R.id.textview);
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
textView.setText(content);
Antwoord 2, Autoriteit 46%
U kunt proberen met
textview.setPaintFlags(textview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Antwoord 3, Autoriteit 6%
Het antwoord “Geaccepteerd” hierboven doet niet werk (wanneer u probeert de tekenreeks te gebruiken als textView.setText(Html.fromHtml(String.format(getString(...), ...)))
.
Zoals vermeld in de Documentaties u moet ontsnappen (HTML Entiteit gecodeerde) openingsbeugel van de innerlijke tags met <
, bijv Resultaat moet eruit zien:
<resource>
<string name="your_string_here">This is an <u>underline</u>.</string>
</resources>
In uw code kunt u de tekst instellen met:
TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(String.format(getString(R.string.my_string), ...)));
Antwoord 4, Autoriteit 5%
Strings.xml bestandsinhoud:
<resource>
<string name="my_text">This is an <u>underline</u>.</string>
</resources>
Layout XML-bestand Shold Gebruik de bovenstaande stringresource met onderstaande eigenschappen van TextView, zoals hieronder weergegeven:
<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"
/>
Antwoord 5, Autoriteit 5%
Voor knop en tekstview Dit is de eenvoudigste manier:
-knop:
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);
Antwoord 6, Autoriteit 3%
In Kotlin kan de extensiefunctieworden gebruikt. Dit kan alleen worden gebruikt vanuit code, niet vanuit xml.
fun TextView.underline() {
paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
}
Gebruik:
tv_change_number.underline()
tv_resend_otp.underline()
Antwoord 7, autoriteit 2%
Eenregelige oplossing
myTextView.setText(Html.fromHtml("<p><u>I am Underlined text</u></p>"));
Het is een beetje laat, maar kan nuttig zijn voor iemand.
Antwoord 8
bekijk de onderstreepte klikbare knopstijl:
<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>
Resultaat:
Antwoord 9
Om dat te doen in Kotlin:
yourTextView.paint?.isUnderlineText = true
Antwoord 10
Een schonere manier in plaats van de
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
methode is om te gebruiken
textView.getPaint().setUnderlineText(true);
En als u later onderstrepen voor die weergave moet uitschakelen, zoals in een hergebruiktweergave in een recycerview, textView.getPaint().setUnderlineText(false);
Antwoord 11
Ik weet dat dit een late antwoord is, maar ik kwam met een oplossing die redelijk goed werkt … ik nam het antwoord van Anthony Forloney voor het onderstrepen van tekst in code en creëerde een subklasse van tekstview die dat voor u verwerkt. Dan kunt u gewoon de subklasse in XML gebruiken wanneer u maar een onderstreepte tekstview wilt hebben.
Hier is de klasse die ik heb gemaakt:
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;
}
}
Nu… wanneer u een onderstreepte tekstweergave in XML wilt maken, doet u het volgende:
<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"/>
Ik heb extra opties toegevoegd aan dit XML-fragment om te laten zien dat mijn voorbeeld werkt met het wijzigen van de tekstkleur, -grootte en -stijl…
Hopelijk helpt dit!
Antwoord 12
De meest recente benadering van het tekenen van onderstreepte tekst wordt beschreven door Romain Guy op mediummet beschikbare broncode op GitHub.
Deze voorbeeldtoepassing laat twee mogelijke implementaties zien:
- Een op paden gebaseerde implementatie waarvoor API-niveau 19 vereist is
- een op regio gebaseerde implementatie die API-niveau 1 vereist
Antwoord 13
Gebruik gewoon het kenmerk in String Resource-bestand, b.v.
<string name="example"><u>Example</u></string>
Antwoord 14
Ik heb deze XML-tekenable gebruikt om een bottom-grens te maken en de opleiding op de achtergrond aan mijn tekstview
<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>
Antwoord 15
Makkelijkere manier
TextView tv = findViewById(R.id.tv);
tv.setText("some text");
setUnderLineText(tv, "some");
Ondersteuning ook TextView-childs zoals EditTekst, knop, selectievakje
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);
}
}
}
Als je wilt
– Klikbare onderstreepte tekst?
– Meerdere delen van TextView onderstrepen?
Vervolgens Controleer dit antwoord
Antwoord 16
Een eenvoudige en flexibele oplossing 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" />
Antwoord 17
Ik heb het antwoord van Samuelvereenvoudigd:
<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>
Antwoord 18
een andere oplossing is om een aangepaste weergave te maken die TextView uitbreidt zoals hieronder weergegeven
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);
}
}
en voeg gewoon toe aan xml zoals hieronder weergegeven
<yourpackage.UnderLineTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="underline text"
/>
Antwoord 19
probeer deze code
in XML
<resource>
<string name="my_text"><![CDATA[This is an <u>underline</u>]]></string>
</resources>
in code
TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(getString(R.string.my_text)));
Veel succes!
Antwoord 20
Als u dit in XMLwilt bereiken, declareert u uw tekenreeks in resource en plaatst u die resourcewaarde in de onderstreepte tag (<u></u>) van HTML.
in TextView, voeg
. toe
android:text="@string/your_text_reference"
En in tekenreeksbronwaarde,
<string name="your_text_reference"><u>Underline me</u></string>
Als je dit programmatisch wilt bereiken, gebruik dan voor Kotlin
textView.paintFlags = textView.paintFlags or Paint.UNDERLINE_TEXT_FLAG
of,
textView.text = Html.fromHtml("<p><u>Underline me</u></p>")
Antwoord 21
- Ga naar strings.xml bronbestand
- Voeg waar nodig een tekenreeks toe in het bronbestand met een HTML-onderstrepingstag.
- Noem de tekenreeksresource-ID in uw Java-code als volgt aan:
sampleTextView.setText(R.string.sample_string);
- De uitvoer moet het woord “Stackoverflow” onderstreept hebben.
Bovendien zal de volgende code de onderstreping niet afdrukken:
String sampleString = getString(R.string.sample_string);
sampleTextView.setText(sampleString);
Gebruik in plaats daarvan de volgende code om de RTF-indeling te behouden:
CharSequence sampleString = getText(R.string.sample_string);
sampleTextView.setText(sampleString);
“U kunt gebruik maken van de GETString (INT) of GETTEXT (INT) om een tekenreeks op te halen. GetText (INT) behoudt elke rijke tekststyling die op de tekenreeks wordt toegepast.” b>Android-documentatie.
Zie de documentatie: https://developer.Android. com / gids / onderwerpen / bronnen / string-resource.html
Ik hoop dat dit helpt.
Antwoord 22
Het bovenste gericht antwoord is goed en eenvoudigst. Soms vind je misschien dat je niet voor een lettertype werkt, maar voor anderen werken (welk probleem kwam ik net tegen bij het omgaan met Chinees.)
Oplossing is niet gebruik “Wrap_Content” alleen voor uw tekstview, want er is geen extra ruimte voor het tekenen van de lijn. U kunt vaste hoogte in uw tekstview instellen of Android gebruiken: Paddingvertical met Wrap_Content.
Antwoord 23
HtmlCompat.fromHtml(
String.format(context.getString(R.string.set_target_with_underline)),
HtmlCompat.FROM_HTML_MODE_LEGACY)
<string name="set_target_with_underline"><u>Set Target<u> </string>
Opmerking Het escape-symbool in XML-bestand
Antwoord 24
Zeer compact, kotlin-versie:
tvTitle.apply {
text = "foobar"
paint?.isUnderlineText = true
}
Antwoord 25
Het is vrij laat om dit te beantwoorden, maar stel dat als iemand de tekst dynamisch wil krijgen, dan kunnen ze deze eenvoudige één regel in hun Java-code gebruiken die werkt:
textView.setText(Html.fromHtml("<p><u>" + get_name + "</u></p>"));
Antwoord 26
Ik had een probleem waarbij ik een aangepast lettertype gebruikte en de onderstreping die was gemaakt met de truc met het bronbestand (<u>Underlined text</u>
) werkte, maar Android slaagde erin om te transformeren de onderstreping tot een soort dal.
Ik heb dit antwoord gebruikt om zelf een rand onder de tekstweergave te tekenen: https://stackoverflow.com/a/10732993/664449. Uiteraard werkt dit niet voor gedeeltelijk onderstreepte tekst of meerregelige tekst.