sourcecode

Android에서 strings.xml 문자열의 굵은 글씨체

copyscript 2022. 8. 1. 22:41
반응형

Android에서 strings.xml 문자열의 굵은 글씨체

strings.xml 문자열 중 하나에 긴 텍스트가 있습니다.나는 그 텍스트에 있는 단어들의 색깔을 과감하게 바꾸고 싶다.

어떻게 해야 하죠?

기본적으로 다음과 같이 문자열 리소스에 html 태그를 사용할 수 있습니다.

<resource>
    <string name="styled_welcome_message">We are <b><i>so</i></b> glad to see you.</string>
</resources>

또한 Html.fromHtml을 사용하거나 spannable을 사용하여 내가 게시한 링크를 확인합니다.

오래된 유사한 질문:TextView 내에 여러 스타일을 포함할 수 있습니까?

문자열 리소스 내에서 html 태그를 사용합니다.-

<resources>
<string name="string_resource_name"><![CDATA[<b> Your text </b>]]> </string>
</resources>

문자열 리소스에서 굵은 글씨 텍스트를 가져옵니다.

private Spanned getSpannedText(String text) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            return Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT);
        } else {
            return Html.fromHtml(text);
        }
    }


 String s = format(context.getResources().getString(R.string.string_resource_name));
 textView.setText(getSpannedText(s));

David Olsson이 말했듯이 문자열 리소스에서 HTML을 사용할 수 있습니다.

<resource>
    <string name="my_string">A string with <i>actual</i> <b>formatting</b>!</string>
</resources>

그렇다면getText(R.string.my_string)보다는getString(R.string.my_string)a를 돌려받습니다.CharSequence가 아니라String포맷이 포함되어 있습니다.

kotlin에서는 리소스(액티비티 | fragments | 컨텍스트)에 확장 함수를 생성하여 문자열을 html 스팬으로 변환할 수 있습니다.

예.

fun Resources.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Resources.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Resources.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = getQuantityString(id, quantity).toHtmlSpan()

fun Resources.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = getQuantityString(id, quantity, *formatArgs).toHtmlSpan()

fun String.toHtmlSpan(): Spanned = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    Html.fromHtml(this, Html.FROM_HTML_MODE_LEGACY)
} else {
    Html.fromHtml(this)
}

사용.

//your strings.xml
<string name="greeting"><![CDATA[<b>Hello %s!</b><br>]]>This is newline</string>

//in your fragment or activity
resources.getHtmlSpannedString(R.string.greeting, "World")

더 많은 확장자 편집

fun Context.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Context.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Context.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = resources.getQuantityString(id, quantity).toHtmlSpan()

fun Context.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = resources.getQuantityString(id, quantity, *formatArgs).toHtmlSpan()


fun Activity.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Activity.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Activity.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = resources.getQuantityString(id, quantity).toHtmlSpan()

fun Activity.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = resources.getQuantityString(id, quantity, *formatArgs).toHtmlSpan()


fun Fragment.getHtmlSpannedString(@StringRes id: Int): Spanned = getString(id).toHtmlSpan()

fun Fragment.getHtmlSpannedString(@StringRes id: Int, vararg formatArgs: Any): Spanned = getString(id, *formatArgs).toHtmlSpan()

fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int): Spanned = resources.getQuantityString(id, quantity).toHtmlSpan()

fun Fragment.getQuantityHtmlSpannedString(@PluralsRes id: Int, quantity: Int, vararg formatArgs: Any): Spanned = resources.getQuantityString(id, quantity, *formatArgs).toHtmlSpan()

Strings.xml

<string name="my_text"><Data><![CDATA[<b>Your text</b>]]></Data></string>

설정하다

textView.setText(Html.fromHtml(getString(R.string.activity_completed_text)));

문자열로 할 수 있습니다.

 <resources xmlns:tools="http://schemas.android.com/tools">

 <string name="total_review"><b>Total Review: </b> </string>

 </resources>

자바 코드에서 접속할 수 있습니다.

proDuctReviewNumber.setText(getResources().getString(R.string.total_review)+productDetailsSuccess.getProductTotalReview());

Kotlin에서는 Context 확장 함수를 만들었습니다.여기에는 @StringRes가 필요하며 옵션으로 파라미터를 지정할 수도 있습니다.

fun Context.fromHtmlWithParams(@StringRes stringRes: Int, parameter : String? = null) : Spanned {

    val stringText = if (parameter.isNullOrEmpty()) {
                    this.getString(stringRes)
                } else {
                    this.getString(stringRes, parameter)
                }

    return Html.fromHtml(stringText, Html.FROM_HTML_MODE_LEGACY)

}

사용.

tv_directors.text = context?.fromHtmlWithParams(R.string.directors, movie.Director)

string.xml 파일 내에 할당된 값이 있는지 여부를 나타내는 솔루션입니다.

 <string name="styled_welcome_message"><![CDATA[We are <b> %1$s </b>  glad to see you.]]></string>

TextView로 설정:

textView?.setText(HtmlCompat.fromHtml(getString(R.string.styled_welcome_message, "sample"), HtmlCompat.FROM_HTML_MODE_LEGACY), TextView.BufferType.SPANNABLE)

추신: 텍스트(String Resources)를 다음 범위로 줄바꿈하는 것을 잊지 마십시오.

<![CDATA[ YOUR TEXT HERE ]]>

문자 같은 걸 받고 있었어요

패스워드를 잊어버렸습니까?여기서 리셋합니다.

기존 Android를 쉽게 구현하기 위해:textStyle="bold"

<LinearLayout
        android:id="@+id/forgotPassword"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:gravity="center"
        >


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:autoLink="all"
            android:linksClickable="false"
            android:selectAllOnFocus="false"

            android:text="Forgot password? "
            android:textAlignment="center"
            android:textColor="@android:color/white"
            />

        <TextView

            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:autoLink="all"
            android:linksClickable="false"
            android:selectAllOnFocus="false"

            android:text="Reset here"
            android:textAlignment="center"
            android:textColor="@android:color/white"
            android:textStyle="bold" />
    </LinearLayout>

어쩌면 누군가에게 도움이 될지도 몰라

스트링스.xml

<string name="sentence">This price is <b>%1$s</b> USD</string>

page.displaces를 클릭합니다.

String successMessage = getText(R.string.message,"5.21");

가격은 5.21달러입니다.

문자열 변수로 포맷을 저장하여 텍스트 뷰에 재사용할 수 없습니다.

포맷을 적용하지 않을 경우 setText(java.lang)를 호출하여 TextView텍스트를 직접 설정할 수 있습니다.Char Sequence).그러나 형식 문자열로도 사용되는 스타일 텍스트 리소스를 작성할 수 있습니다.일반적으로 형식(String, Object...) 및 getString(int, Object...) 메서드는 문자열에서 모든 스타일 정보를 삭제하기 때문에 이 방법은 작동하지 않습니다.회피책은 이스케이프된 엔티티를 사용하여 HTML 태그를 쓰는 것입니다.이 태그는 포맷이 이루어진 후 Html(String)에서 회복됩니다.

또는 Htlm.fromHtml()을 사용하여 문자열 ID와 everytime bind get 문자열을 저장합니다.방법.

예:

코틀린 확장

fun Context.getStringFromResource(stringId: Int): Spanned {
    return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        Html.fromHtml(java.lang.String.format(resources.getString(stringId)), 
 Html.FROM_HTML_MODE_COMPACT)
    } else {
        Html.fromHtml(java.lang.String.format(resources.getString(stringId)))
    }
}

코드:

getStringFromResource(id)

문자열 리소스에서 기본 HTML 태그를 사용하려면 태그를 이스케이프해야 합니다.그렇지 않으면 무시됩니다.간단히 '<'를 &lt;로, '>'를 '&gt;'로 바꿉니다. 예:

<string name="bold_statement">This is a &lt;bold&gt; statement</string>

작성 예정:이것은 대담한 발언이다.String 리소스를 로드할 때는 반드시 다음을 사용하십시오.

HtmlCompat.fromHtml(stringFromResource, HtmlCompat.FROM_HTML_MODE_COMPACT)

언급URL : https://stackoverflow.com/questions/7130619/bold-words-in-a-string-of-strings-xml-in-android

반응형