Untuk menggambar Garis Bawah di bawah TextView di Android

Jawaban:

323

Ada tiga cara untuk mendasari teks di TextView.

  1. SpannableString

  2. setPaintFlags (); dari TextView

  3. Html.fromHtml ();

Izinkan saya menjelaskan kepada Anda semua pendekatan:

Pendekatan Pertama

Untuk mendasari teks di TextView, Anda harus menggunakan SpannableString

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

Pendekatan ke-2

Anda bisa menggunakan metode setPaintFlags dari TextView untuk menggarisbawahi teks TextView.

Misalnya.

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

Anda dapat merujuk konstanta kelas Paint jika Anda ingin menyerang melalui teks.

Pendekatan ke-3

Menggunakan Html.fromHtml(htmlString);

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

ATAU

txtView.setText(Html.fromHtml("<u>underlined</u> text"));
Kartik Domadiya
sumber
1
Senang mendengarnya .. Tandai pertanyaan ini sebagai terselesaikan sehingga pengguna lain dapat merujuknya.
Kartik Domadiya
4
Pendekatan ketiga akan digunakan Html.fromHtml("<u>This text will be underlined</u>"), tetapi saya harus mengakui bahwa saya adalah penggemar yang jauh lebih besar dalam menggunakan SpannableStrings. @Kartik: Anda mungkin juga menggunakan a StrikethroughSpanpada teks untuk membuat efek coretan. :)
MH.
Suka pendekatan ke-3. Pendek, sederhana dan ringkas dan hanya menambahkan satu baris kode ekstra ke program saya.
Matt
Saya tahu ini agak kuno, tetapi adakah cara untuk mengatur ketebalan garis bawah?
Andreas Wong
yang mana yang digunakan untuk konten preferenceActivity, di PreferenceCategory?
Pengembang android
40

cukup apit teks Anda dengan tag <u> di file sumber daya string.xml Anda

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

dan dalam Aktivitas / Fragmen Anda

mTextView.setText(R.string.your_string);
Sarpe
sumber
7
@CHAKRAVARTHI ini tidak akan berfungsi jika Anda mentransmisikan teks ke string sebelum menyetel. Misalnya textView.setText(getString(R.string.text)) <- salah . Benar: textView.setText(getText(R.string.text)) atau hanya textView.setText(R.string.text). Alasannya adalah ini yang getText()mengembalikan Spannabledengan rentang garis bawah, tetapi jika Anda menggunakannya getString()akan mengubah Spannablemenjadi Stringrentang yang dihasilkan dihapus.
Yaroslav Mytkalyk
poin yang bagus! Saya telah mengedit jawaban saya saat ini agar lebih jelas
Sarpe
19

Ini berhasil untuk saya.

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
mani
sumber
11

Untuk siapa pun yang masih melihat querstion ini. Ini untuk hyperlink tetapi Anda dapat memodifikasinya hanya untuk garis bawah biasa:

Buat 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>

Buat gaya baru:

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

Kemudian gunakan gaya ini di TextView Anda:

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

Jika TextView Anda memiliki lebar tetap, solusi alternatifnya adalah membuat Tampilan yang akan terlihat seperti garis bawah dan memposisikannya tepat di bawah TextView Anda.

<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>
Lera
sumber
2

Solusi sederhana dan berkelanjutan adalah membuat daftar lapisan dan menjadikannya sebagai latar belakang TextView Anda:

<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>
Darush
sumber
2
Ini adalah pilihan terbaik jika textview satu baris
hushed_voice
0

menggarisbawahi textview di android

5 Cara Luar Biasa Untuk Menggarisbawahi TextView Di Android - Kotlin / Java & XML

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

Namun Html.fromHtml (Sumber daya string) tidak digunakan lagi di API 24.

Jadi, Anda dapat menggunakan pustaka dukungan android terbaru androidx.core.text.HtmlCompat . Sebelum itu, Anda perlu memasukkan dependensi dalam proyek Anda.

`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));

Menggunakan 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));

menggunakan PaintFlags

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

menggunakan SpannableString

`String content1 = "3.1 Underline using SpannableString";
        SpannableString spannableString1 = new SpannableString(content1);
        spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
        textview31.setText(spannableString1);`
Vijay Ram
sumber