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 태그를 사용하려면 태그를 이스케이프해야 합니다.그렇지 않으면 무시됩니다.간단히 '<'를 <로, '>'를 '>'로 바꿉니다. 예:
<string name="bold_statement">This is a <bold> 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
'sourcecode' 카테고리의 다른 글
Vuej에 전역 변수 적용 (0) | 2022.08.03 |
---|---|
구성 요소 렌더링 함수의 무한 업데이트 루프 (0) | 2022.08.03 |
Laravel Nova - 리소스의 인덱스 보기 다시 로드 (0) | 2022.08.01 |
C를 사용하여 Linux에서 CPU 수를 얻는 방법 (0) | 2022.08.01 |
비동기 Vuex 액션을 2회 실행할 경우 콜 대기 후 코드를 랜덤 순서로 실행할 수 있습니까? (0) | 2022.08.01 |