簡體   English   中英

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 &lt;u> %1$s &lt;/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 );

Kotlin - 普通代碼

val text = getString(R.string.welcome)

val spannableString = SpannableString(text).apply {
    setSpan(UnderlineSpan(), 0, text.length, 0)
}

text_view.text = spannableString

Kotlin - 擴展

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)

Kotlin - 綁定代碼

@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 來做這樣的事情。

  1. 在 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()}
  1. 然后在 .xml 布局中使用它

     <TextView android:id="@+id/discount_label" underlineText="@{true}" android:text="underlined text"... ... />

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM