วาดขีดเส้นใต้ใต้ TextView ใน Android


118

ฉันต้องการขีดเส้นใต้ใต้TextViewไฟล์. ฉันได้ค้นหาเนื้อหาบางส่วน แต่ไม่พบว่ามีประโยชน์อะไรเลย

ใครก็ได้โปรดช่วยฉันที่นี่?


คำตอบ:


323

มีสามวิธีในการขีดเส้นใต้ข้อความใน TextView

  1. SpannableString

  2. setPaintFlags (); ของ TextView

  3. Html.fromHtml ();

ให้ฉันอธิบายวิธีการทั้งหมด:

แนวทางที่ 1

สำหรับการขีดเส้นใต้ข้อความใน TextView คุณต้องใช้SpannableString

String udata="Underlined Text";
SpannableString content = new SpannableString(udata);
content.setSpan(new UnderlineSpan(), 0, udata.length(), 0);
mTextView.setText(content);

แนวทางที่ 2

คุณสามารถใช้เมธอดsetPaintFlagsของ TextView เพื่อขีดเส้นใต้ข้อความของ TextView

สำหรับเช่น

mTextView.setPaintFlags(mTextView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
mTextView.setText("This text will be underlined");

คุณสามารถอ้างถึงค่าคงที่ของคลาสPaint ได้หากคุณต้องการขีดฆ่าผ่านข้อความ

แนวทางที่ 3

ใช้ประโยชน์จาก Html.fromHtml(htmlString);

String htmlString="<u>This text will be underlined</u>";
mTextView.setText(Html.fromHtml(htmlString));

หรือ

txtView.setText(Html.fromHtml("<u>underlined</u> text"));

1
ดีใจที่ได้ทราบว่า .. ทำเครื่องหมายคำถามนี้ว่าแก้ไขแล้วเพื่อให้ผู้ใช้รายอื่นสามารถอ้างอิงได้
Kartik Domadiya

4
วิธีที่สามจะใช้Html.fromHtml("<u>This text will be underlined</u>")แต่ฉันต้องยอมรับว่าฉันเป็นแฟนตัวยงของการใช้ SpannableStrings @Kartik: คุณอาจใช้ a StrikethroughSpanบนข้อความเพื่อสร้างเอฟเฟกต์ขีดทับ :)
MH.

รักแนวทางที่ 3 สั้นง่ายและกระชับและเพิ่มโค้ดพิเศษเพียงบรรทัดเดียวในโปรแกรมของฉัน
Matt

ฉันรู้ว่ามันเก่าไปแล้ว แต่มีวิธีกำหนดความหนาของขีดเส้นใต้หรือไม่?
Andreas Wong

สิ่งใดที่ใช้สำหรับเนื้อหา PreferenceActivity ใน PreferenceCategory
นักพัฒนา Android

40

เพียงล้อมรอบข้อความของคุณด้วยแท็ก <u> ในไฟล์ทรัพยากร string.xml ของคุณ

<string name="your_string"><u>Underlined text</u></string>

และในกิจกรรม / ส่วนของคุณ

mTextView.setText(R.string.your_string);

7
@CHAKRAVARTHI มันจะไม่ทำงานถ้าคุณส่งข้อความเป็นสตริงก่อนที่จะตั้งค่า เช่นtextView.setText(getString(R.string.text)) <- ผิด ขวา: หรือเพียงแค่textView.setText(getText(R.string.text)) textView.setText(R.string.text)เหตุผล beind นี้ว่าgetText()ผลตอบแทนSpannableกับช่วงขีดเส้นใต้ แต่ถ้าคุณใช้getString()มันจะแปลงSpannableจะStringมีช่วงที่เกิดถูกลบออก
Yaroslav Mytkalyk

จุดดี! ฉันได้แก้ไขคำตอบปัจจุบันของฉันเพื่อให้ชัดเจนยิ่งขึ้น
Sarpe


11

สำหรับใครก็ตามที่ยังคงมองหาคำถามนี้ สิ่งนี้มีไว้สำหรับไฮเปอร์ลิงก์ แต่คุณสามารถแก้ไขได้เพียงแค่ขีดเส้นใต้ธรรมดา:

สร้าง drawable (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>

สร้างรูปแบบใหม่:

<style name="Hyperlink">
    <item name="android:textColor">#3498db</item>
    <item name="android:background">@drawable/hyperlink_underline</item>
  </style>

จากนั้นใช้สไตล์นี้กับ TextView ของคุณ:

<TextView
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    local:MvxBind="Text Id; Click ShowJobInfoCommand"
    style="@style/HyperLink"/>

3

หาก TextView ของคุณมีความกว้างคงที่ทางเลือกอื่นสามารถสร้าง View ซึ่งจะมีลักษณะเหมือนขีดเส้นใต้และวางตำแหน่งไว้ด้านล่าง 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>

2

วิธีแก้ปัญหาที่ง่ายและยั่งยืนคือการสร้างรายการเลเยอร์และทำให้เป็นพื้นหลังของ 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>

2
นี่เป็นทางเลือกที่ดีที่สุดหากเป็น textview บรรทัดเดียว
hushed_voice

0

ขีดเส้นใต้ textview ใน Android

5 วิธีที่น่าทึ่งในการขีดเส้นใต้ TextView ใน Android - Kotlin / Java & XML

  1. String html = "<u>Underline using Html.fromHtml()</u>"; textview.setText(Html.fromHtml(html));

แต่Html.fromHtml (ทรัพยากรสตริง)เลิกใช้งานแล้วใน API 24

เพื่อให้คุณสามารถใช้ห้องสมุดสนับสนุนล่าสุด Android androidx.core.text.HtmlCompat ก่อนหน้านั้นคุณต้องรวมการพึ่งพาในโครงการของคุณ

`implementation 'androidx.core:core:1.0.1'`
  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));

ใช้ strings.xml ,

  1. <string name="underline_text">1.3 &lt;u>Underline using HtmlCompat.fromHtml() and string resource&lt;/u></string>

textview13.setText(HtmlCompat.fromHtml(getString(R.string.underline_text), HtmlCompat.FROM_HTML_MODE_LEGACY));

โดยใช้ PaintFlags

  1. textview2.setPaintFlags(textview2.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG); textview2.setText("2. Underline using setPaintFlags()");

โดยใช้ SpannableString

`String content1 = "3.1 Underline using SpannableString";
        SpannableString spannableString1 = new SpannableString(content1);
        spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
        textview31.setText(spannableString1);`
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.