[android] Android 및 & nbsp; TextView에서

 TextView 에 추가 할 수 있습니까? 비슷한 기능을 달성 한 사람이 있습니까?

TextView에서 깨지지 않는 공간을 원합니다.



답변

TextViewHTML보다 간단하고 가벼운 솔루션 인 유니 코드 줄 바꿈없는 공백 문자 ( \u00A0)를 존중합니다 .


답변

\u00A0중단 \u0020되지 않는 공간이며 중단 되지 않는 공간 이 아닙니다.


답변

 읽기 쉬운 솔루션 을 사용 하는 것이 가능합니다. 헥스 코드를 기억하지 않는 한 텍스트에 \u00A0또는  또는  /  를 포함 하는 것은 소스 코드의 독자 (또는 해당 문제에 대한 번역자)에게 많은 정보를 전달하지 않습니다. 에서 명명 된 엔티티를 사용하는 방법은 다음과 같습니다 strings.xml.

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
    <!ENTITY nbsp "&#160;"><!-- non-breaking space, U+00A0 -->
]>
<resources>
    ...
</resources>

누락 된 선언이 생성됩니다. 원래 HTML 선언은 일반적인 XHTML DTD 에서 참조 된 https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent 에서 찾을 수 있습니다 . XML 파서가 파일을로드하는 동안이를 읽고 대체하기 때문에이 모든 것이 작동하므로 엔터티가 컴파일 된 결과 리소스에 표시되지 않습니다.

&nbsp;Android 텍스트 ( CharSequence) 리소스

<!-- Defined in <resources> -->
<string name="html_text">Don\'t break <b>this&nbsp;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을 인식하지 못함)
기기의 HTML
미리보기의 HTML

&nbsp; Android String (형식화 된) 리소스

<!-- Defined in <resources> -->
<string name="formatted_text">%1$s is&nbsp;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 &nbsp;");
((TextView)view.findViewById(android.R.id.text1)).setText(contents);

장치 및 미리보기 (미리보기는 엔티티를 인식하지 않으며 Java 문자열은 리터럴 텍스트입니다!)
장치에서 포맷
미리보기 형식

추가 트릭

이것은 DTD 엔티티의 사용 예일 뿐이며 자신의 선호도에 따라 사용하십시오.

<!ENTITY con "\&apos;"><!-- contraction, otherwise error: "Apostrophe not preceded by \"
                            Sadly &apos; cannot be overridden due to XML spec:
                            https://www.w3.org/TR/xml/#sec-predefined-ent -->
<!ENTITY param1 "&#37;1$s"><!-- format string argument #1 -->

<string name="original">Don\'t wrap %1$s</string>
<string name="with_entities">Don&con;t wrap &param1;</string>

둘 다 강조하는 데 도움이됩니다.
강조 표시된 XML 엔티티


답변

TextView는 중단되지 않는 공간을 존중해야합니다.

<string name="test">Hello&#160;world</string>

또는

new TextView("Hello\u00A0world");


답변

내가 만난 한 가지 독특한 상황은 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>


답변

이것은 나를 위해 일했습니다.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
    textview.setText(Html.fromHtml(your string, Html.FROM_HTML_MODE_LEGACY));
} else {
    textview.setText(Html.fromHtml(your string);
}


답변

이것은 TextView에서 nbsp를 사용하는 예입니다.

<string name="text">Example:\u00A0</string>