Android'de TextView'in altına bir Alt Çizgi çizmek için


Yanıtlar:


323

TextView'da metnin altını çizmenin üç yolu vardır.

  1. SpannableString

  2. setPaintFlags (); TextView

  3. Html.fromHtml ();

Size tüm yaklaşımları açıklayayım:

1. Yaklaşım

TextView'daki metnin altını çizmek için SpannableString kullanmanız gerekir

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

2. Yaklaşım

TextView metninin altını çizmek için TextView'in setPaintFlags yöntemini kullanabilirsiniz .

Örneğin.

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

Metnin üstünü çizmek istiyorsanız , Paint sınıfının sabitlerine başvurabilirsiniz .

3. Yaklaşım

Faydalanmak Html.fromHtml(htmlString);

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

VEYA

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

1
Bunu duyduğuma sevindim .. Diğer kullanıcıların başvurabilmesi için bu soruyu çözüldü olarak işaretleyin.
— Kartik Domadiya

4
Üçüncü bir yaklaşım kullanıyor olabilirdi Html.fromHtml("<u>This text will be underlined</u>"), ancak SpannableStrings'i kullanmanın çok daha büyük bir hayranı olduğumu itiraf etmeliyim. @Kartik: Üstü StrikethroughSpançizili efekt yaratmak için metinde a kullanabilirsiniz . :)
— MH.

3. yaklaşımı seviyorum. Kısa, basit ve öz ve programıma fazladan bir satır kod ekler.
— Matt

Bunun biraz eski olduğunu biliyorum, ancak alt çizginin kalınlığını ayarlamanın bir yolu var mı?
— Andreas Wong

PreferenceCategory'da preferenceActivity içeriği için bunlardan hangisi kullanılır?
— android geliştiricisi

40

string.xml kaynak dosyanızda metninizi <u> etiketiyle çevreleyin

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

ve Aktivitenizde / Parçanızda

mTextView.setText(R.string.your_string);

7
@CHAKRAVARTHI Metni ayarlamadan önce dizeye çevirirseniz işe yaramaz. Örneğin textView.setText(getString(R.string.text)) <- yanlış . Doğru: textView.setText(getText(R.string.text)) veya sadece textView.setText(R.string.text). Bunun nedeni , altı çizili yayılma aralıklarıyla getText()geri dönen Spannable, ancak kullanırsanız , sonuçta ortaya çıkan yayılma alanlarını kaldırmaya getString()dönüştürecektir . SpannableString
— Yaroslav Mytkalyk

iyi bir nokta! Daha net olmak için mevcut cevabımı düzenledim
— Sarpe

19

Benim için çalışıyor.

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);

11

Hala bu soruya bakan herkes için. Bu bir köprü içindir, ancak basit bir alt çizgi için onu değiştirebilirsiniz:

Bir çekilebilir (hyperlink_underline.xml) oluşturun:

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

Yeni bir stil yaratın:

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

Ardından bu stili TextView'unuzda kullanın:

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

3

TextView'iniz sabit genişliğe sahipse, alternatif çözüm, altı çizili gibi görünen bir Görünüm oluşturmak ve onu TextView'unuzun hemen altına yerleştirmek olabilir.

<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

Basit ve sürdürülebilir bir çözüm, bir katman listesi oluşturmak ve bunu TextView'unuzun arka planı yapmaktır:

<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
Bu, tek satırlık bir
— metin

0

android'de bir metin görünümünün altını çizin

Android'de Bir TextView Altını Çizmenin 5 Harika Yolu - Kotlin / Java ve XML

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

Ancak Html.fromHtml (Dize kaynağı) , API 24'te kullanımdan kaldırıldı.

Böylece en son android destek kitaplığını androidx.core.text.HtmlCompat'ı kullanabilirsiniz . Bundan önce, projenize bağımlılığı dahil etmeniz gerekir.

`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 kullanarak ,

  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 kullanarak

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

SpannableString kullanarak

`String content1 = "3.1 Underline using SpannableString";
        SpannableString spannableString1 = new SpannableString(content1);
        spannableString1.setSpan(new UnderlineSpan(), 0, content1.length(), 0);
        textview31.setText(spannableString1);`
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.