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.