![](/img/trans.png)
[英]how to set underline and color to partly text at one time on TextView?
[英]How to set underline text on textview?
如何在textview
上設置下划線文本?
我使用了以下代碼,但它不起作用。
tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>").toString());
您必須為此使用SpannableString :
String mystring=new String("Hello.....");
SpannableString content = new SpannableString(mystring);
content.setSpan(new UnderlineSpan(), 0, mystring.length(), 0);
yourtextview.setText(content);
更新:您可以在此處以所有可能的方式參考我對 Underling TextView 的回答。
以下是android中下划線文本的一些方法:
第一種方法
您可以在strings.xml
中定義您的字符串
<string name="your_string"><u>Underlined text</u></string>
並在您的xml
文件中使用該字符串
<TextView
android:id="@+id/txt_underlined"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:text="@string/your_string"/>
或者您可以在 Activity/Fragment 中使用該字符串
txtView.setText(R.string.your_string);
第二種方法
要在 TextView 中為文本添加下划線,可以使用 SpannableString
String text="Underlined Text";
SpannableString content = new SpannableString(text);
content.setSpan(new UnderlineSpan(), 0, text.length(), 0);
txtView.setText(content);
第三種方法
您可以利用 TextView 的 setPaintFlags 方法為 TextView 的文本添加下划線。
txtView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
txtView.setText("Underlined Text");
第四種方法
利用Html.fromHtml(htmlString)
;
String htmlString="<u>Underlined Text</u>";
txtView.setText(Html.fromHtml(htmlString));
或者
txtView.setText(Html.fromHtml("<u>underlined</u> text"));
筆記:
如果您在布局中添加了這一行android:textAllCaps="true"
,那么以上都不起作用。 為此,您必須在 Caps 中定義您的字符串,然后使用上述任何方法。
用這個
tvHide.setPaintFlags(tvHide.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
Android 支持使用字符串 xml 中的HTML標記進行字符串格式化。 因此,以下將起作用:
<string name="label_testinghtmltags"><u>This text has an underscore</u></string>
然后,您只需像往常一樣使用它。 您可以在此處的文檔中查看更多信息
更新:
為了進一步擴展答案, 文檔說:
...
format(String, Object...)
和getString(int, Object...)
方法從字符串中刪除所有樣式信息。 . 解決此問題的方法是編寫帶有轉義實體的 HTML 標記,然后在格式化發生后使用 fromHtml(String) 恢復這些標記
例如,以下代碼片段的結果字符串不會顯示為包含下划線元素:
<string name="html_bold_test">This <u>%1$s</u> has an underscore</string>
String result = getString(R.string.html_bold_test, "text")
但是,以下代碼段的結果將包含下划線:
<string name="html_bold_test">This <u> %1$s </u> has an underscore</string>
String result = Html.fromHtml(getString(R.string.html_bold_test, "text"))
嘗試這個,
tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
在TextView
中顯示下划線的簡單方法是:
yourTextView.getPaint().setUnderlineText(true);
如果要刪除該視圖的下划線,可以編寫以下代碼:
yourTextView.getPaint().setUnderlineText(false);
即使您設置android:textAllCaps="true"
它也會起作用
你快到了:只是不要在Html.fromHtml()
) 上調用toString()
) ,你會得到一個可以完成這項工作的跨區對象;)
tvHide.setText(Html.fromHtml("<p><u>Hide post</u></p>"));
不需要使用 HTML 屬性,讓我們專注於 java xD 我有同樣的問題,我找到了在 java 中的方法:
String text="Hide post";
TextView tvHide=(TextView)findViewById(R.id.text);
SpannableString spanString = new SpannableString(text);
spanString.setSpan(new UnderlineSpan(), 0, spanString.length(), 0);
tvHide.setText(spanString );
val text = getString(R.string.welcome)
val spannableString = SpannableString(text).apply {
setSpan(UnderlineSpan(), 0, text.length, 0)
}
text_view.text = spannableString
fun TextView.underline(resource: Int) {
val text = context.getString(resource)
val spannableString = SpannableString(text).apply {
setSpan(UnderlineSpan(), 0, text.length, 0)
}
setText(spannableString)
}
用法:
text_view.underline(R.string.welcome)
@BindingAdapter("underline")
fun underline(view: TextView, resource: Int) {
if (resource == 0) return
val text = view.context.getString(resource)
val spannableString = SpannableString(text).apply {
setSpan(UnderlineSpan(), 0, text.length, 0)
}
view.text = spannableString
}
用法:
<TextView
android:id="@+id/tv_report_problem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:underline="@{@string/common_report_problem}" />
我相信您需要使用CharSequence 。 你可以在這里找到一個例子。
你可以這樣做:
tvHide.setText(Html.fromHtml("<p><span style='text-decoration: underline'>Hide post</span></p>").toString());
希望這可以幫助
您可以輕松地添加一個高度為 1dp 的視圖,對齊起點和 TextView 的終點,就在它的正下方。 您還可以使用負值的 marginTop 使下划線更接近 TextView。 如果您在相對布局中使用 TextView 和 under ,則對齊會容易得多。 這是示例:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<View
android:id="@+id/viewForgotPasswordUnderline"
android:layout_width="wrap_content"
android:layout_height="1dp"
android:layout_below="@id/txtForgotPassword"
android:layout_alignStart="@id/txtForgotPassword"
android:layout_alignEnd="@id/txtForgotPassword"
android:layout_marginTop="-2dp"
android:background="@color/lightGray" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/txtForgotPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:paddingTop="8dp"
android:text="@string/userLoginForgotPassword"
android:textColor="@color/lightGray"
android:textSize="16dp" />
</RelativeLayout>
在我的sign_in.xml
文件中,我使用了這個:
<Button
android:id="@+id/signuptextlinkbtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:background="@android:color/transparent"
android:onClick="performSingUpMethod"
android:text="Sign up now!"
android:textColor="#5B55FF"
android:textSize="15dp"
android:textStyle="bold" />
在我的SignIn.java
文件中,我使用了這個:
import android.graphics.Paint;
Button signuptextlinkbutton = (Button) findViewById(R.id.signuptextlinkbtn);
signuptextlinkbutton.setPaintFlags(signuptextlinkbutton.getPaintFlags()| Paint.UNDERLINE_TEXT_FLAG);
現在我可以看到我的鏈接帶有下划線。 它只是文本,甚至認為我將其聲明為Button
。
Kotlin:找到 ID 時執行
textview =findViewById<TextView>(R.id.textview).also { it.paint?.isUnderlineText =true }
我使用 BindingAdapters 來做這樣的事情。
在 kotlin 文件中聲明一個 bindingAdapter
@BindingAdapter("underlineText") fun TextView.setUnderlineText(isVisible: Boolean){ paintFlags = if(isVisible) paintFlags or Paint.UNDERLINE_TEXT_FLAG else paintFlags and Paint.UNDERLINE_TEXT_FLAG.inv()}
然后在 .xml 布局中使用它
<TextView android:id="@+id/discount_label" underlineText="@{true}" android:text="underlined text"... ... />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.