Android XMLでテキストに下線を付けるにはどうすればよいですか?


108

XMLファイル内のテキストに下線を付けるにはどうすればよいですか?にオプションが見つかりませんtextStyle


uが使用してみているstyle="text-decoration: underline;"
Kρяσѕρєя

1
あなたはそれを完全にどのように使用するべきですか?
Michael Zeuner

uがこの試してみるtextView.setText(Html.fromHtml("<u>"+"testest"+"</u>"));
ρяσѕρєяK

回答:


174

文字列リソースのxmlファイル(HTMLタグをサポート)を使用している場合は<b> </b><i> </i>およびを使用して実行できます<u> </u>

<resources>
    <string name="your_string_here">
        This is an <u>underline</u>.
    </string>
</resources>

コードから何かに下線を引きたい場合:

TextView tv = (TextView) view.findViewById(R.id.tv);
SpannableString content = new SpannableString("Content");
content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
tv.setText(content);

お役に立てれば


9
私はこれを試しました。文字列に下線が引かれませんか?
Michael Zeuner 2012

5
<u>たとえば、カスタムフォントを使用している場合など、タグを介した基盤が機能しない場合があります。ただし、プログラムによる基礎UnderlineSpanは実際には失敗していません。そのため、最も信頼できるソリューションとしてお勧めします。
Giulio Piancastelli 14

Javaでテキストを設定する必要はありません。ただ、使用<u>して<\u>XMLで、それは十分です。
マクシムドミトリエフ2014年

9
私の場合、android studioプレビューはhtmlタグを判別できませんでした。しかし、プロジェクトを実際のデバイスで実行すると、下線付きのテキストが楽しく表示されます。
アルビン、

1
<whine> Googleがbold / italic / normalをすでに提供しているときに文字列をHTMLに変換する必要があるという事実は、Androidを5年以上使用してきたことを考えるとかなり
緩慢

57

これを使って:

TextView txt = (TextView) findViewById(R.id.Textview1);
txt.setPaintFlags(txt.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

この解決策は常にテキスト全体に下線を引くので、その一部だけに下線を付けたい場合は現実的ではないことに注意してください。そのためには、あなたが必要UnderlineSpanです。
Giulio Piancastelli 14

25
<resource>
    <string name="your_string_here">This is an <u>underline</u>.</string>
</resources>

それが機能しない場合

<resource>
<string name="your_string_here">This is an &lt;u>underline&lt;/u>.</string>

「<」がキーワードになる可能性があるためです。

そして表示するため

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(getString(R.string.your_string_here)));

3
これは機能しますが、何らかの理由でTextViewを設定してxml属性android:textAllCaps = "true"を使用する場合、下線は表示されません。この修飾子を削除すると、下線が意図したとおりに表示されます。ただのヘッズアップ:)
マットW

5

まず、String.xmlファイルに移動します

ここでは、斜体、太字、下線などのHTML属性を追加できます。

    <resources>
        <string name="your_string_here">This is an <u>underline</u>.</string>
    </resources>

3

それを行う別の方法は、TextViewを拡張するカスタムコンポーネントを作成することです。下線付きの複数のTextViewが必要な場合に適しています。

コンポーネントのコードは次のとおりです。

package com.myapp.components;

import android.content.Context;
import android.support.v7.widget.AppCompatTextView;
import android.text.SpannableString;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;

public class LinkTextView extends AppCompatTextView {
    public LinkTextView(Context context) {
        this(context, null);
    }

    public LinkTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void setText(CharSequence text, BufferType type) {
        SpannableString content = new SpannableString(text);
        content.setSpan(new UnderlineSpan(), 0, content.length(), 0);

        super.setText(content, type);
    }
}

そしてそれをxmlで使用する方法:

<com.myapp.components.LinkTextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Hello World!" />


2

以下のマークアップを使用できますが、に設定するtextAllCapstrue下線効果が削除されることに注意してください。

<resource>
    <string name="my_string_value">I am <u>underlined</u>.</string>
</resources>


注意

マークアップを含む文字列(login_change_settings)でtextAllCapsを使用します。マークアップは大文字変換によって削除されます

textAllCapsテキスト変換は、CharSequenceでtoStringを呼び出すことになります。これは、などのマークアップを削除する最終的な効果があります。このチェックは、textAllCaps = trueも指定するマークアップを含む文字列の使用を検索します。


2

Android TextViewで下線付きのテキストを実現するには、さまざまな方法があります。

1. <u>This is my underlined text</u> または

I just want to underline <u>this</u> word

2.プログラムで同じことができます。

`textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);`

3. SpannableStringを作成し、それをTextViewテキストプロパティとして設定することで実行できます。

SpannableString text = new SpannableString("Voglio sottolineare solo questa parola");
text.setSpan(new UnderlineSpan(), 25, 6, 0);
textView.setText(text);

2

以下の方法を使用しましたが、うまくいきました。以下はボタンの例ですが、TextViewでも使用できます。

Button btnClickMe = (Button) findViewById(R.id.btn_click_me);
btnClickMe.setPaintFlags(btnClickMe.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

1

テキスト文字列を比較する場合、またはテキストが動的に変化する場合は、制約レイアウトでビューを作成できます。このビューは、このようにテキストの長さに応じて調整されます

 <android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txt_Previous"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginBottom="8dp"
        android:gravity="center"
        android:text="Last Month Rankings"
        android:textColor="@color/colorBlue"
        android:textSize="15sp"
        android:textStyle="bold"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <View
        android:layout_width="0dp"
        android:layout_height="0.7dp"
        android:background="@color/colorBlue"
        app:layout_constraintEnd_toEndOf="@+id/txt_Previous"
        app:layout_constraintStart_toStartOf="@+id/txt_Previous"
        app:layout_constraintBottom_toBottomOf="@id/txt_Previous"/>


</android.support.constraint.ConstraintLayout>

0
public void setUnderLineText(TextView tv, String textToUnderLine) {
        String tvt = tv.getText().toString();
        int ofe = tvt.indexOf(textToUnderLine, 0);

        UnderlineSpan underlineSpan = new UnderlineSpan();
        SpannableString wordToSpan = new SpannableString(tv.getText());
        for (int ofs = 0; ofs < tvt.length() && ofe != -1; ofs = ofe + 1) {
            ofe = tvt.indexOf(textToUnderLine, ofs);
            if (ofe == -1)
                break;
            else {
                wordToSpan.setSpan(underlineSpan, ofe, ofe + textToUnderLine.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                tv.setText(wordToSpan, TextView.BufferType.SPANNABLE);
            }
        }
    }

最も簡単な方法

TextView tv = findViewById(R.id.tv);
tv.setText("some text");
setUnderLineText(tv, "some");

EditText、Button、CheckboxなどのTextView子もサポートします

お望みならば

-クリック可能な下線テキスト?

-TextViewの複数の部分に下線を引きますか?

次に、この回答を確認してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.