Android XML에서 텍스트에 어떻게 밑줄을 긋나요?


답변:


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 2014

Java에서 텍스트를 설정할 필요가 없습니다. 그냥 사용 <u>하고 <\u>XML에서, 그것은 충분하다.
Maksim Dmitriev

9
제 경우에는 안드로이드 스튜디오 미리보기가 html 태그를 결정할 수 없었습니다. 그러나 실제 장치에서 프로젝트를 실행하면 밑줄이 그어진 텍스트가 행복하게 표시됩니다.
Alvin

1
<whine> Google이 이미 굵게 / 기울임 꼴 / 보통을 제공 할 때 문자열을 HTML로 변환해야한다는 사실은 Android가 5 년
넘게 사용되어 왔음을

57

이것을 사용하십시오 :

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

이 솔루션은 항상 전체 텍스트에 밑줄을 긋기 때문에 텍스트의 일부에만 밑줄을 긋는 것은 불가능합니다. 이를 위해서는 UnderlineSpan.
Giulio Piancastelli 2014

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
작동하지만 어떤 이유로 xml 속성 android : textAllCaps = "true"를 사용하도록 TextView를 설정하면 밑줄이 나타나지 않습니다. 이 수정자를 제거하면 밑줄이 의도 한대로 표시됩니다.
Matt 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

아래 방법을 사용했는데 저에게 효과적이었습니다. 아래는 Button의 예이지만 TextView에서도 사용할 수 있습니다.

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

1

텍스트 문자열을 비교하거나 텍스트가 동적으로 변경되는 경우 Constraint 레이아웃에서보기를 만들 수 있으며 다음과 같이 텍스트 길이에 따라 조정됩니다.

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