[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, coloritalic확장 기능에 있습니다 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>

결과 :
본사 : 미국 노스 캐롤라이나 무어 스빌