[android] TextView에서 특정 텍스트를 만드는 방법 BOLD
TextView의 특정 텍스트를 BOLD로 만드는 방법을 모르겠습니다.
이것처럼
txtResult.setText(id+" "+name);
출력이 다음과 같기를 원합니다.
1111 닐
id
그리고 name
나는 데이터베이스에서 값을 검색 한 변수가 있고, 내가 만들고 싶어 id
굵게, 그러나 단지 id
이 때문에 name
영향을받지 않습니다, 나는이 작업을 수행하는 방법을 모르겠어요.
답변
HTML로 문자열을 작성하고 설정하십시오.
String sourceString = "<b>" + id + "</b> " + name;
mytextview.setText(Html.fromHtml(sourceString));
답변
Html.fromHtml () 을 사용할 수 있지만 SpannableStringBuilder 인보 다 원시적 인 접근 방식을 사용할 수 있지만 이 게시물 은 도움 이 될 수 있습니다.
SpannableStringBuilder str = new SpannableStringBuilder("Your awesome text");
str.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), INT_START, INT_END, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView tv=new TextView(context);
tv.setText(str);
답변
첫째 : Raghav Sood의 답변 에서 성능이 느린 코드를 사용하는 것에 대해 걱정할 필요가 없습니다 .
둘째 : Kotlin을 사용할 때 w3bshark의 답변에서 제공하는 확장 기능을 작성할 필요가 없습니다 .
Finnaly : Google 의 Kotlin android-ktx 라이브러리 를 사용하기 만하면 됩니다 ( 자세한 내용 및 프로젝트에 포함시키는 방법 은 여기 참조 ).
// Suppose id = 1111 and name = neil (just what you want).
val s = SpannableStringBuilder()
.bold { append(id) }
.append(name)
txtResult.setText(s)
생산 : 1111 닐
최신 정보:
나는 그것이 다른 사람에게 도움이 될 수 있다고 생각하기 때문에 여기에 얼마나 멀리 갈 수 있는지 보여주는 것이 더 많은 사용 사례입니다.
-
파란색과 기울임 꼴로 일부 부분이있는 텍스트를 표시해야하는 경우 :
val myCustomizedString = SpannableStringBuilder() .color(blueColor, { append("A blue text ") }) .append("showing that ") .italic{ append("it is painless") }
-
굵은 기울임 꼴과 기울임 꼴로 텍스트를 표시해야하는 경우 :
bold { italic { append("Bold and italic") } }
즉, bold
, append
, color
및 italic
확장 기능에 있습니다 SpannableStringBuilder
. 공식 문서 에서 다른 가능성을 생각할 수있는 다른 확장 기능을 볼 수 있습니다 .
답변
선택한 답변이 만족스러운 결과를 제공하지 못한다고 생각했습니다. 나는 2 개의 문자열을 취하는 내 자신의 함수를 작성했습니다. 전체 텍스트 및 굵게 표시하려는 텍스트 부분.
‘text’의 ‘textToBold’가 굵게 표시된 SpannableStringBuilder를 반환합니다.
태그로 묶지 않고 하위 문자열을 굵게 표시하는 기능이 유용하다는 것을 알았습니다.
/**
* Makes a substring of a string bold.
* @param text Full text
* @param textToBold Text you want to make bold
* @return String with bold substring
*/
public static SpannableStringBuilder makeSectionOfTextBold(String text, String textToBold){
SpannableStringBuilder builder=new SpannableStringBuilder();
if(textToBold.length() > 0 && !textToBold.trim().equals("")){
//for counting start/end indexes
String testText = text.toLowerCase(Locale.US);
String testTextToBold = textToBold.toLowerCase(Locale.US);
int startingIndex = testText.indexOf(testTextToBold);
int endingIndex = startingIndex + testTextToBold.length();
//for counting start/end indexes
if(startingIndex < 0 || endingIndex <0){
return builder.append(text);
}
else if(startingIndex >= 0 && endingIndex >=0){
builder.append(text);
builder.setSpan(new StyleSpan(Typeface.BOLD), startingIndex, endingIndex, 0);
}
}else{
return builder.append(text);
}
return builder;
}
답변
wtsang02가 말했듯이 HTML을 사용하는 것은 비용이 많이 드는 오버 헤드입니다. 기본 솔루션을 사용하십시오. 문자열을 수정할 필요가 없으면 SpannableStringBuilder가 아닌 SpannableString을 사용하십시오.
String boldText = "id";
String normalText = "name";
SpannableString str = new SpannableString(boldText + normalText);
str.setSpan(new StyleSpan(Typeface.BOLD), 0, boldText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(str);
답변
XML의 문자열을 사용하려는 경우 다음과 같이 할 수 있습니다.
strings.xml ( “CDATA”부분이 중요합니다. 그렇지 않으면 작동하지 않습니다)
<string name="test">
<![CDATA[
<b>bold!</b> normal
]]>
</string>
레이아웃 파일
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity">
<TextView
android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center" />
</FrameLayout>
암호
textView.text = HtmlCompat.fromHtml(getString(R.string.test), HtmlCompat.FROM_HTML_MODE_LEGACY)
답변
예를 들어 다음과 같이 지정된 텍스트를 닫으십시오. <b>"your text here:"</b>
<string name="headquarters">"<b>"Headquarters:"</b>" Mooresville, North Carolina, U.S.</string>
결과 :
본사 : 미국 노스 캐롤라이나 무어 스빌