답변:
TextView
HTML보다 간단하고 가벼운 솔루션 인 유니 코드 줄 바꿈없는 공백 문자 ( \u00A0
)를 존중합니다 .
\u00A0
중단 \u0020
되지 않는 공간이며 중단 되지 않는 공간 이 아닙니다.
읽기 쉬운 솔루션 을 사용 하는 것이 가능합니다. 헥스 코드를 기억하지 않는 한 텍스트에 \u00A0
또는  
또는  
/  
를 포함 하는 것은 소스 코드의 독자 (또는 해당 문제에 대한 번역자)에게 많은 정보를 전달하지 않습니다. 에서 명명 된 엔티티를 사용하는 방법은 다음과 같습니다 strings.xml
.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY nbsp " "><!-- non-breaking space, U+00A0 -->
]>
<resources>
...
</resources>
누락 된 선언이 생성됩니다. 원래 HTML 선언은 일반적인 XHTML DTD 에서 참조 된 https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent 에서 찾을 수 있습니다 . XML 파서가 파일을로드하는 동안이를 읽고 대체하기 때문에이 모든 것이 작동하므로 엔터티가 컴파일 된 결과 리소스에 표시되지 않습니다.
Android 텍스트 ( CharSequence
) 리소스<!-- Defined in <resources> -->
<string name="html_text">Don\'t break <b>this name</b></string>
<!-- Used in a layout -->
<TextView
android:layout_width="130dp"
android:layout_height="wrap_content"
android:background="#10000000"
android:text="@string/html_text"
/>
장치 및 미리보기 (미리보기에서 HTML을 인식하지 못함)
Android String (형식화 된) 리소스<!-- Defined in <resources> -->
<string name="formatted_text">%1$s is nice</string>
<!-- Used in a layout -->
<TextView
android:layout_width="130dp"
android:layout_height="wrap_content"
android:background="#10000000"
tools:text="@string/formatted_text"
/>
그런 다음 코드에서 :
String contents = getString(R.string.formatted_text, "Using an ");
((TextView)view.findViewById(android.R.id.text1)).setText(contents);
장치 및 미리보기 (미리보기는 엔티티를 인식하지 않으며 Java 문자열은 리터럴 텍스트입니다!)
이것은 DTD 엔티티의 사용 예일 뿐이며 자신의 선호도에 따라 사용하십시오.
<!ENTITY con "\'"><!-- contraction, otherwise error: "Apostrophe not preceded by \"
Sadly ' cannot be overridden due to XML spec:
https://www.w3.org/TR/xml/#sec-predefined-ent -->
<!ENTITY param1 "%1$s"><!-- format string argument #1 -->
<string name="original">Don\'t wrap %1$s</string>
<string name="with_entities">Don&con;t wrap ¶m1;</string>
’
문자를 잘 처리하므로 아포스트로피 항목을 만들 필요가 없습니다. <string name="original">Don’t wrap %1$s</string>
예상대로 작동합니다.
'
VS를 ’
. Android는 더 멋진 유니 코드 문자에는 문제가 없지만 이스케이프가 필요한 ASCII 0x27에는 문제가 있습니다. 엔티티는 단지 편의 일 뿐이며 유용 할 수있는 위치를 보여주기 위해 여기에 넣었습니다.
문자열에서하는 유니 코드보다 번역에 방법이 더 의미가있다\u00A0
con
하고 param1
같은 파일을.
내가 만난 한 가지 독특한 상황은 String.format
매개 변수 를 사용하는 문자열 리소스에 끊기지 않는 공백을 추가하는 것 입니다.
<resources>
<string name="answer_progress" formatted="false">Answered %d of %d</string>
</resources>
줄 바꿈하지 않는 공백 문자를 문자열에 복사하여 붙여 넣으려고했는데 컴파일 후 일반 이전 공백으로 대체되었습니다.
formatted = "false" 제거, 형식 인수 번호 매기기 및 백 슬래시 표기법 사용이 저에게 효과적이었습니다.
<resources>
<string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string>
</resources>