답변:
예, 문자열 리소스 에서 다음을 참조하십시오 . 서식 및 스타일링
을 사용하여 문자열의 형식을 지정해야하는 경우 문자열
String.format(String, Object...)
인수에 형식 인수를 추가하면됩니다. 예를 들어 다음 리소스를 사용하십시오.<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
이 예제에서 형식 문자열에는 두 개의 인수
%1$s
가 있습니다. 문자열과%2$d
10 진수입니다. 다음과 같이 애플리케이션의 인수로 문자열을 형식화 할 수 있습니다.Resources res = getResources(); String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
참고 getString
형식 문자열과 같은 문자열을 사용하는 과부하가 있습니다 :
String text = res.getString(R.string.welcome_messages, username, mailCount);
복수를 처리해야 할 경우 다음을 사용하십시오.
<plurals name="welcome_messages">
<item quantity="one">Hello, %1$s! You have a new message.</item>
<item quantity="other">Hello, %1$s! You have %2$d new messages.</item>
</plurals>
첫 번째 mailCount
매개 변수는 사용할 형식 (단일 또는 복수)을 결정하는 데 사용되며 다른 매개 변수는 대체 항목입니다.
Resources res = getResources();
String text = res.getQuantityString(R.plurals.welcome_messages, mailCount, username, mailCount);
자세한 내용은 문자열 리소스 : 복수형 을 참조하십시오.
언제 처음으로 톱 %1$s
과 %2$d
허용 대답에, 그것은 아무 의미하지 않았다. 좀 더 설명해 드리겠습니다.
이를 형식 지정 자라고합니다. xml 문자열에서 형식은 다음과 같습니다.
%[parameter_index$][format_type]
1$
, 2$
하고 3$
. 자원 문자열에 배치하는 순서는 중요하지 않으며 매개 변수를 제공하는 순서 만 중요합니다.형식 유형 하십시오 있습니다 많은 당신이 일을 포맷 할 수있는 방법은 ( 설명서를 참조하십시오 ). 다음은 일반적인 것들입니다.
s
끈d
십진 정수f
부동 소수점 수회색 부분이 프로그래밍 방식으로 삽입되는 다음 형식의 문자열을 만듭니다.
내 동생
Mary
은12
나이가 많다.
string.xml
<string name="my_xml_string">My sister %1$s is %2$d years old.</string>
MyActivity.java
String myString = "Mary";
int myInt = 12;
String formatted = getString(R.string.my_xml_string, myString, myInt);
getString
활동 중이 어서 사용할 수 있습니다 . 사용할 수 context.getResources().getString(...)
없는 경우 사용할 수 있습니다.String.format()
또한 문자열을 형식화합니다.1$
및 2$
용어는 순서대로 사용 할 필요가 없습니다. 즉, 2$
앞에 올 수 있습니다 1$
. 다른 단어 순서를 사용하는 언어의 앱을 국제화 할 때 유용합니다.%1$s
반복하려면 XML에서 형식 지정자를 여러 번 사용할 수 있습니다 .%%
실제 %
캐릭터 를 얻는 데 사용 합니다 .Java 코드를 사용하지 않고 실제 strings.xml 파일의 매개 변수를 사용하려는 경우 :
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY appname "WhereDat">
<!ENTITY author "Oded">
]>
<resources>
<string name="app_name">&appname;</string>
<string name="description">The &appname; app was created by &author;</string>
</resources>
이것은 리소스 파일에서 작동하지 않습니다. 즉, 변수는 필요한 각 XML 파일로 변수를 복사해야합니다.
<!DOCTYPE... ]>
별도의 파일로 부품 을 정의하고 여러 리소스 파일에 포함시키는 방법이 있습니까? 이것을 달성하기위한 트릭?
똑같은 것을 찾고 마침내 다음과 같은 매우 간단한 해결책을 찾았습니다. 최고 : 그것은 즉시 작동합니다.
1. 문자열 리소스를 변경하십시오.
<string name="welcome_messages">Hello, <xliff:g name="name">%s</xliff:g>! You have
<xliff:g name="count">%d</xliff:g> new messages.</string>
2. 문자열 대체를 사용하십시오.
c.getString(R.string.welcome_messages,name,count);
여기서 c는 컨텍스트이고 name 은 문자열 변수이며 int 변수를 계산 합니다.
당신은 포함해야합니다
<resources xmlns:xliff="http://schemas.android.com/apk/res-auto">
당신의 res / strings.xml에. 나를 위해 작동합니다. :)
xliff
형식 지정자 주위의 태그 의 요점은 무엇입니까 ? %s
및 %d
지정자를 단독으로 사용하는 것과 달리 어떤 추가 가치가 있습니까?
Kotlin에서는 다음과 같이 문자열 값을 설정하면됩니다.
<string name="song_number_and_title">"%1$d ~ %2$s"</string>
레이아웃에서 텍스트보기를 작성하십시오.
<TextView android:id="@+id/song_number_and_title"/>
Anko를 사용하는 경우 코드 에서이 작업을 수행하십시오.
val song = database.use { // get your song from the database }
song_number_and_title.setText(resources.getString(R.string.song_number_and_title, song.number, song.title))
응용 프로그램 컨텍스트에서 리소스를 가져와야 할 수도 있습니다.
그러나 Android 복수 처리에 대한 Elias Mårtenson 의 답변 은 "zero" 여야합니다 . "0"과 같은 특정 값을 해석하는 데 문제가 있습니다.
res / values / string.xml에
<resources>
<string name="app_name">Hello World</string>
<string name="my_application">Application name: %s, package name: %s</string>
</resources>
자바 코드에서
String[] args = new String[2];
args[0] = context.getString(R.string.app_name);
args[1] = context.getPackageName();
String textMessage = context.getString(R.string.my_application,(Object[]) args);
당신은 사용할 수 있습니다 MessageFormat
:
<string name="customer_address">Wellcome: {0} {1}</string>
자바 코드에서 :
String text = MessageFormat(R.string.customer_address).format("Name","Family");
API 레벨 1 :
https://developer.android.com/reference/java/text/MessageFormat.html
예! Java / Kotlin 코드를 작성하지 않고 빌드 할 때이 작은 라이브러리를 사용하여 XML 만 작성할 수 있으므로 빌드 시간에 그렇게하므로 앱이 영향을받지 않습니다 : https://github.com/LikeTheSalad/android 문자열 참조
용법
당신의 문자열 :
<resources>
<string name="app_name">My App Name</string>
<string name="template_welcome_message">Welcome to ${app_name}</string>
</resources>
빌드 후 생성 된 문자열 :
<!--resolved.xml-->
<resources>
<string name="welcome_message">Welcome to My App Name</string>
</resources>
문제에 대한 직접적인 Kotlin 솔루션 :
strings.xml
<string name="customer_message">Hello, %1$s!\nYou have %2$d Products in your cart.</string>
kotlinActivityORFragmentFile.kt :
val username = "Andrew"
val products = 1000
val text: String = String.format(
resources.getString(R.string.customer_message), username, products )
문자열 파일에서 이것을 사용하십시오
<string name="redeem_point"> You currently have %s points(%s points = 1 %s)</string>
그리고 코드에서 적절하게 사용하십시오.
coinsTextTV.setText(String.format(getContext().getString(R.string.redeem_point), rewardPoints.getReward_points()
, rewardPoints.getConversion_rate(), getString(R.string.rs)));
허용 된 답변의 Kotlin 버전 ...
val res = resources
val text = String.format(res.getString(R.string.welcome_messages), username, mailCount)
resources.getString(int, ... args)
대신 인수와 함께 메소드 를 사용 하는 것입니다 String.format
. 이 코드에는 val
키워드 이외의 kotlin 사양이 없습니다 . 답변을 참조하십시오 msbodw001