bestsource

안드로이드 레이아웃에서 텍스트에 밑줄을 그을 수 있습니까?

bestsource 2023. 6. 3. 08:34
반응형

안드로이드 레이아웃에서 텍스트에 밑줄을 그을 수 있습니까?

Android 레이아웃에서 밑줄 친 텍스트를 정의하는 방법xml 파일?

다음과 같은 HTML 태그를 지원하는 문자열 리소스 xml 파일을 사용하는 경우 이를 달성할 수 있습니다.<b></b>,<i></i>그리고.<u></u>.

<resources>
    <string name="your_string_here"><![CDATA[This is an <u>underline</u>.]]></string>
</resources>

코드에서 밑줄을 긋고 싶다면 다음을 사용합니다.

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

로 시도할 수 있습니다.

textview.setPaintFlags(textview.getPaintFlags() |   Paint.UNDERLINE_TEXT_FLAG);

Strings.xml 파일 내용:

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

레이아웃 xml 파일은 아래와 같이 텍스트 보기 속성이 아래와 같이 위의 문자열 리소스를 사용합니다.

<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="@string/my_text"

    android:selectAllOnFocus="false"
    android:linksClickable="false"
    android:autoLink="all"
    />

위의 "승인된" 답변이 작동하지 않습니다(다음과 같은 문자열을 사용하려고 할 때).textView.setText(Html.fromHtml(String.format(getString(...), ...))).

설명서에 명시된 대로 내부 태그의 여는 괄호(html 엔티티 인코딩)를 사용하여 이스케이프해야 합니다.&lt;들어 과 같이표시되어야 .

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

그런 다음 코드에서 다음을 사용하여 텍스트를 설정할 수 있습니다.

TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(String.format(getString(R.string.my_string), ...)));

단추 및 텍스트 보기의 경우 가장 쉬운 방법은 다음과 같습니다.

단추:

Button button = (Button) findViewById(R.id.btton1);
button.setPaintFlags(button.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

텍스트 보기:

TextView textView = (TextView) findViewById(R.id.textview1);
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

In Kotlin 확장 기능을 사용할 수 있습니다.이것은 xml이 아니라 코드에서만 사용할 수 있습니다.

fun TextView.underline() {
    paintFlags = paintFlags or Paint.UNDERLINE_TEXT_FLAG
}

용도:

 tv_change_number.underline()
 tv_resend_otp.underline()

코틀린에서 그것을 하기 위해서:

yourTextView.paint?.isUnderlineText = true

한 줄 솔루션

myTextView.setText(Html.fromHtml("<p><u>I am Underlined text</u></p>"));

조금 늦었지만 누군가에게 유용할 수 있습니다.

밑줄 친 클릭 가능 단추 스타일을 확인하십시오.

<TextView
    android:id="@+id/btn_some_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btn_add_contact"
    android:textAllCaps="false"
    android:textColor="#57a0d4"
    style="@style/Widget.AppCompat.Button.Borderless.Colored" />

strings.xml:

<string name="btn_add_contact"><u>Add new contact</u></string>

결과:

여기에 이미지 설명 입력

더 깨끗한 방법 대신
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);방법은 사용하는 것입니다.textView.getPaint().setUnderlineText(true);

뷰에 에는 RecyclerView와 같이 사용할 수 있습니다.textView.getPaint().setUnderlineText(false);

XML에서 이를 달성하려면 리소스에 문자열을 선언하고 해당 리소스 값을 HTML의 밑줄 태그(<u>/u>)에 넣습니다. TextView에서 다음을 추가합니다.

android:text="@string/your_text_reference"

문자열 리소스 값으로,

<string name="your_text_reference"><u>Underline me</u></string>

프로그래밍 방식으로 이 작업을 수행하려면 Kotlin을 사용합니다.

textView.paintFlags = textView.paintFlags or Paint.UNDERLINE_TEXT_FLAG

아니면,

textView.text = Html.fromHtml("<p><u>Underline me</u></p>")

답이 늦은 건 알지만, 제가 해결책을 생각해냈어요.코드의 텍스트에 밑줄을 긋는 것에 대한 앤서니 포로니의 답변을 받아 TextView의 하위 클래스를 만들었습니다.그런 다음 밑줄이 표시된 텍스트 보기를 원할 때마다 XML의 하위 클래스를 사용할 수 있습니다.

다음은 내가 만든 클래스입니다.

import android.content.Context;
import android.text.Editable;
import android.text.SpannableString;
import android.text.TextWatcher;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;
import android.widget.TextView;

/**
 * Created with IntelliJ IDEA.
 * User: Justin
 * Date: 9/11/13
 * Time: 1:10 AM
 */
public class UnderlineTextView extends TextView
{
    private boolean m_modifyingText = false;

    public UnderlineTextView(Context context)
    {
        super(context);
        init();
    }

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

    public UnderlineTextView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
        init();
    }

    private void init()
    {
        addTextChangedListener(new TextWatcher()
        {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after)
            {
                //Do nothing here... we don't care
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count)
            {
                //Do nothing here... we don't care
            }

            @Override
            public void afterTextChanged(Editable s)
            {
                if (m_modifyingText)
                    return;

                underlineText();
            }
        });

        underlineText();
    }

    private void underlineText()
    {
        if (m_modifyingText)
            return;

        m_modifyingText = true;

        SpannableString content = new SpannableString(getText());
        content.setSpan(new UnderlineSpan(), 0, content.length(), 0);
        setText(content);

        m_modifyingText = false;
    }
}

이제... XML에서 밑줄 텍스트 보기를 만들 때마다 다음을 수행할 수 있습니다.

<com.your.package.name.UnderlineTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:gravity="center"
    android:text="This text is underlined"
    android:textColor="@color/blue_light"
    android:textSize="12sp"
    android:textStyle="italic"/>

이 XML 스니펫에 추가 옵션을 추가하여 텍스트 색상, 크기 및 스타일을 변경하는 데 사용할 수 있음을 보여드렸습니다.

이것이 도움이 되길 바랍니다!

밑줄 친 텍스트를 그리는 가장 최근의 접근 방식은 GitHub에서 사용 가능한 소스 코드를 가진 매체에서 Romain Guy에 의해 설명됩니다.이 샘플 애플리케이션은 두 가지 구현 가능성을 보여줍니다.

  • API 레벨 19가 필요한 경로 기반 구현
  • API 레벨 1이 필요한 지역 기반 구현

여기에 이미지 설명 입력

예를 들어 문자열 리소스 파일의 속성을 사용합니다.

<string name="example"><u>Example</u></string>

이 xml 드로잉 가능을 사용하여 하단 테두리를 만들고 드로잉 가능을 배경으로 텍스트 보기에 적용했습니다.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle" >
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>

    <item android:top="-5dp" android:right="-5dp" android:left="-5dp">
        <shape>
            <solid android:color="@android:color/transparent" />
            <stroke
                    android:width="1.5dp"
                    android:color="@color/pure_white" />
        </shape>
    </item>
</layer-list>

가장 쉬운 방법

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

또한 텍스트 편집, 단추, 확인란과 같은 텍스트 보기 하위 항목도 지원합니다.

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);
            }
        }
    }

네가 원한다면

클릭 가능한 밑줄 텍스트?

텍스트 보기의 여러 부분에 밑줄을 그으시겠습니까?

그런 다음 이 답변 확인

xml로 제공되는 간단하고 유연한 솔루션:

<View
  android:layout_width="match_parent"
  android:layout_height="3sp"
  android:layout_alignLeft="@+id/your_text_view_need_underline"
  android:layout_alignRight="@+id/your_text_view_need_underline"
  android:layout_below="@+id/your_text_view_need_underline"
  android:background="@color/your_color" />

다른 솔루션은 아래와 같이 TextView를 확장하는 사용자 정의 보기를 만드는 것입니다.

public class UnderLineTextView extends TextView {

    public UnderLineTextView(Context context) {
        super(context);
        this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
    }

    public UnderLineTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        this.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
    }

}

아래와 같이 xml에 추가하면 됩니다.

<yourpackage.UnderLineTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="underline text"
 />

클래스와 함께 사용해 보세요.

자바용

textview.setPaintFlags(textview.getPaintFlags() |   Paint.UNDERLINE_TEXT_FLAG);

코틀린을 위하여

textview.setPaintFlags(textview.getPaintFlags() or Paint.UNDERLINE_TEXT_FLAG)

이 코드를 사용해 보세요.

XML로

<resource>
 <string name="my_text"><![CDATA[This is an <u>underline</u>]]></string> 
</resources> 

암호로

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

행운을 빕니다.

새뮤얼의 대답을 단순화했습니다.

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--https://stackoverflow.com/a/40706098/4726718-->
    <item
        android:left="-5dp"
        android:right="-5dp"
        android:top="-5dp">
        <shape>
            <stroke
                android:width="1.5dp"
                android:color="@color/colorAccent" />
        </shape>
    </item>
</layer-list>

매우 작은 코틀린 버전:

tvTitle.apply { 
    text = "foobar"
    paint?.isUnderlineText = true
}
  1. strings.xml 리소스 파일로 이동합니다.
  2. 필요한 경우 리소스 파일에 HTML 밑줄 태그가 있는 문자열을 추가합니다.

strings.xml HTML 밑줄 샘플

  1. Java 코드에서 문자열 리소스 ID를 다음과 같이 호출합니다.
sampleTextView.setText(R.string.sample_string);
  1. 출력에는 "스택 오버플로"라는 단어가 밑줄로 표시되어야 합니다.

또한 다음 코드는 밑줄을 인쇄하지 않습니다.

String sampleString = getString(R.string.sample_string);
sampleTextView.setText(sampleString);

대신 다음 코드를 사용하여 리치 텍스트 형식을 유지합니다.

CharSequence sampleString = getText(R.string.sample_string);
sampleTextView.setText(sampleString);

"getString(int) 또는 getText(int)를 사용하여 문자열을 검색할 수 있습니다. getText(int)는 문자열에 적용된 리치 텍스트 스타일을 유지합니다."Android 설명서.

설명서를 참조하십시오. https://developer.android.com/guide/topics/resources/string-resource.html

이것이 도움이 되길 바랍니다.

투표된 최고의 답변은 올바르고 간단합니다.그러나 일부 글꼴에서 작동하는 것이 아니라 다른 글꼴에서 작동하는 경우가 있습니다.(중국어를 다룰 때 어떤 문제를 접하게 되었습니까?)

선을 긋기 위한 추가 공간이 없으므로 TextView에만 "WRAP_CONTENT"를 사용하지 마십시오.TextView에 고정 높이를 설정하거나 WRAP_CONTENT와 함께 Android:paddingVertical을 사용할 수 있습니다.

HtmlCompat.fromHtml(
                    String.format(context.getString(R.string.set_target_with_underline)),
                    HtmlCompat.FROM_HTML_MODE_LEGACY)
<string name="set_target_with_underline">&lt;u>Set Target&lt;u> </string>

xml 파일의 이스케이프 기호를 확인합니다.

이것에 대답하는 것은 꽤 늦었지만, 만약 누군가 동적으로 텍스트를 얻고 싶다면, 그들은 자바 코드에서 다음과 같은 간단한 한 줄을 사용할 수 있습니다.

 textView.setText(Html.fromHtml("<p><u>" + get_name + "</u></p>"));
     <com.google.android.material.textfield.TextInputEditText
                    android:layout_width="0dp"
                    android:layout_height="match_parent"
                    android:layout_weight="1"
                    android:backgroundTint="@android:color/transparent"
                    android:hint="@string/search_url"
                    android:textColor="@color/coffee_color"
                    android:textColorHint="@color/coffee_color"
                    />

이 코드는 나에게 효과가 있었습니다.

TextView textView = findViewById(R.id.my_text_view);
textView.setPaintFlags(textView.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

파일트릭 trick)으로 작성된 사용자 정의 글꼴과 밑줄을 사용하는 문제가 있었습니다.<u>Underlined text</u>)는 효과가 있었지만 Android는 밑줄을 일종의 스트라이크 트로프로 변환하는 데 성공했습니다.

저는 이 답변을 사용하여 텍스트 보기 아래에 테두리를 그렸습니다. https://stackoverflow.com/a/10732993/664449 .분명히 이것은 부분 밑줄이 쳐진 텍스트나 다중 줄이 있는 텍스트에서는 작동하지 않습니다.

언급URL : https://stackoverflow.com/questions/2394935/can-i-underline-text-in-an-android-layout

반응형