답변:
, 및과 같은 HTML 태그를 지원 하는 문자열 리소스 xml 파일을 사용하는 경우 달성 할 수 있습니다 .<b></b>
<i></i>
<u></u>
<resources>
<string name="your_string_here">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);
<u>
태그를 통한 기본 기능 이 작동하지 않는 경우가 있습니다. 예를 들어 사용자 정의 글꼴을 사용하는 경우가 있습니다. 그러나 프로그래밍 방식으로 UnderlineSpan
아직 기본적 으로 실패하지 않았으므로 가장 신뢰할 수있는 솔루션으로 권장합니다.
당신은 시도 할 수 있습니다
textview.setPaintFlags(textview.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
| Paint.ANTI_ALIAS_FLAG
그렇지 않으면 텍스트가 매우 선명하게 나타납니다. 이것은 더 낮은 API에서 더 자주 나타납니다.
textView.paintFlags = textView.paintFlags or Paint.UNDERLINE_TEXT_FLAG
위의 "허용 된"답변이 작동 하지 않습니다 (문자열을 사용하려고 할 때textView.setText(Html.fromHtml(String.format(getString(...), ...)))
.
문서에 명시된 바와 같이 내부 태그의 이스케이프 (html 엔티티 인코딩) 여는 괄호를 사용하여 <
예를 들어 결과는 다음과 같아야합니다.
<resource>
<string name="your_string_here">This is an <u>underline</u>.</string>
</resources>
그런 다음 코드에서 다음을 사용하여 텍스트를 설정할 수 있습니다.
TextView textView = (TextView) view.findViewById(R.id.textview);
textView.setText(Html.fromHtml(String.format(getString(R.string.my_string), ...)));
Strings.xml 파일 내용 :
<resource>
<string name="my_text">This is an <u>underline</u>.</string>
</resources>
레이아웃 xml 파일 shold는 아래와 같이 textview의 아래 속성과 함께 위의 문자열 리소스를 사용합니다.
<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"
/>
Button 및 TextView의 경우 가장 쉬운 방법입니다.
단추:
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);
밑줄이 클릭 가능한 버튼 스타일을 확인하십시오.
<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>
결과:
나는 이것이 늦은 대답이라는 것을 알고 있지만 꽤 잘 작동하는 솔루션을 생각해 냈습니다 ... 코드에서 텍스트에 밑줄을 긋은 것에 대해 Anthony Forloney의 대답을 가져 와서 그것을 처리하는 TextView의 하위 클래스를 만들었습니다. 그런 다음 밑줄 친 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 스 니펫에 추가 옵션을 추가하여 예제가 텍스트 색상, 크기 및 스타일 변경과 함께 작동 함을 보여줍니다.
도움이 되었기를 바랍니다!
이 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>
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"
/>
나는 사무엘 의 대답을 단순화했다 .
<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>
TextView tv = findViewById(R.id.tv);
tv.setText("some text");
전체 TextView에 밑줄
setUnderLineText(tv, tv.getText().toString());
TextView의 일부에 밑줄
setUnderLineText(tv, "some");
EditText, Button, Checkbox와 같은 TextView 자식도 지원합니다.
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의 여러 부분에 밑줄을 표시하려면 내 대답을 확인하십시오.
sampleTextView.setText(R.string.sample_string);
또한 다음 코드는 밑줄을 인쇄하지 않습니다.
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)는 문자열에 적용된 서식있는 텍스트 스타일을 유지합니다."안드로이드 문서.
https://developer.android.com/guide/topics/resources/string-resource.html 설명서를 참조하십시오
이게 도움이 되길 바란다.
사용자 정의 글꼴을 사용하고 리소스 파일 트릭 ( <u>Underlined text</u>
)으로 만든 밑줄 이 작동했지만 Android에서 밑줄을 일종의 스트라이크 여물통으로 변환하는 데 문제가있었습니다.
https://stackoverflow.com/a/10732993/664449 텍스트 뷰 아래에 테두리를 그리기 위해이 답변을 사용했습니다 . 분명히 이것은 밑줄이 그어진 텍스트 나 여러 줄로 된 텍스트에는 적용되지 않습니다.