Chcę narysować podkreślenie poniżej mojego TextView
. Przeszukałem kilka treści, ale nie znalazłem nic owocnego.
Czy ktoś może mi tutaj pomóc?
Chcę narysować podkreślenie poniżej mojego TextView
. Przeszukałem kilka treści, ale nie znalazłem nic owocnego.
Czy ktoś może mi tutaj pomóc?
Odpowiedzi:
Istnieją trzy sposoby podkreślania tekstu w TextView.
Pozwól, że wyjaśnię ci wszystkie podejścia:
Podejście 1
Aby podświetlić tekst w TextView, musisz użyć SpannableString
String udata="Underlined Text";
SpannableString content = new SpannableString(udata);
content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
mTextView.setText(content);
Podejście 2
Możesz skorzystać z metody setPaintFlags TextView , aby podkreślić tekst TextView.
Np.
mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mTextView.setText("This text will be underlined");
Możesz odwołać się do stałych klasy Paint, jeśli chcesz przekreślić tekst.
Trzecie podejście
Zrobić użytek z Html.fromHtml(htmlString);
String htmlString="<u>This text will be underlined</u>";
mTextView.setText(Html.fromHtml(htmlString));
LUB
txtView.setText(Html.fromHtml("<u>underlined</u> text"));
Html.fromHtml("<u>This text will be underlined</u>")
Przydałoby się trzecie podejście , ale muszę przyznać, że jestem znacznie większym fanem używania SpannableStrings. @Kartik: Równie dobrze możesz użyć znaku StrikethroughSpan
w tekście, aby stworzyć efekt przekreślenia. :)
po prostu otocz swój tekst znacznikiem <u> w pliku zasobów string.xml
<string name="your_string"><u>Underlined text</u></string>
oraz w swojej aktywności / fragmencie
mTextView.setText(R.string.your_string);
textView.setText(getString(R.string.text))
<- źle . Racja: textView.setText(getText(R.string.text))
lub po prostu textView.setText(R.string.text)
. Powodem beind to, że getText()
wraca Spannable
z podkreślają przęseł, ale jeśli używasz getString()
to przekonwertować Spannable
do String
wynikających przęseł zostanie usunięty.
Dla każdego, kto wciąż patrzy na to pytanie. To jest dla hiperłącza, ale możesz je zmodyfikować, aby uzyskać zwykłe podkreślenie:
Utwórz do rysowania (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>
Utwórz nowy styl:
<style name="Hyperlink">
<item name="android:textColor">#3498db</item>
<item name="android:background">@drawable/hyperlink_underline</item>
</style>
Następnie użyj tego stylu w swoim TextView:
<TextView
android:layout_height="wrap_content"
android:layout_width="wrap_content"
local:MvxBind="Text Id; Click ShowJobInfoCommand"
style="@style/HyperLink"/>
Jeśli Twój TextView ma stałą szerokość, alternatywnym rozwiązaniem może być utworzenie widoku, który będzie wyglądał jak podkreślenie i umieszczenie go bezpośrednio pod 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>
Prostym i trwałym rozwiązaniem jest utworzenie listy warstw i ustawienie jej jako tła dla 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 niesamowitych sposobów podkreślenia TextView w Androidzie - Kotlin / Java i XML
String html = "<u>Underline using Html.fromHtml()</u>";
textview.setText(Html.fromHtml(html));
Ale Html.fromHtml (zasób String) został wycofany w API 24.
Możesz więc skorzystać z najnowszej biblioteki obsługi Androida androidx.core.text.HtmlCompat . Wcześniej musisz uwzględnić zależność w swoim projekcie.
`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));
Używając 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));
używając PaintFlags
textview2.setPaintFlags(textview2.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
textview2.setText("2. Underline using setPaintFlags()");
przy użyciu SpannableString
`String content1 = "3.1 Underline using SpannableString";
SpannableString spannableString1 = new SpannableString(content1);
spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
textview31.setText(spannableString1);`