AndroidでTextViewの下に下線を引くには


回答:


323

TextViewでテキストに下線を引く方法は3つあります。

  1. SpannableString

  2. setPaintFlags(); TextView

  3. Html.fromHtml();

すべてのアプローチについて説明しましょう。

最初のアプローチ

TextViewのテキストに下線を引くには、SpannableStringを使用する必要があります

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

2番目のアプローチ

TextView のsetPaintFlagsメソッドを使用して、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
3番目のアプローチはを使用することHtml.fromHtml("<u>This text will be underlined</u>")ですが、私はSpannableStringsを使用するのがはるかに好きであることを認めざるを得ません。@Kartik:StrikethroughSpanテキストにa を使用して取り消し線効果を作成することもできます。:)
MH。

3番目のアプローチが大好きです。短く、シンプルで簡潔で、プログラムにコードを1行追加します。
マット

これは少し古いことは知っていますが、下線の太さを設定する方法はありますか?
Andreas Wong

PreferenceCategoryで、preferenceActivityコンテンツに使用されるのはどれですか。
Android開発者

40

string.xmlリソースファイルでテキストを<u>タグで囲むだけです

<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()、それが変換されますSpannableString削除されるスパンを結果。
Yaroslav Mytkalyk 2014年

いい視点ね!私は現在の回答をより明確にするために編集しました
Sarpe '24年

19

私にとってはその作品。

tv.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);

11

この質問をまだ見ている人のために。これはハイパーリンク用ですが、プレーンな下線だけに変更できます。

ドローアブルを作成します(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の幅が固定されている場合、別の解決策は、下線のように見えるビューを作成して、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
これは、1行のテキストビューの場合に最適です
hushed_voice

0

Androidでtextviewに下線を引きます

AndroidでTextViewに下線を引く5つのすばらしい方法-Kotlin / Java&XML

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

ただし、Html.fromHtml(String resource)は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.