Android 및 & nbsp; TextView에서


108

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

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

답변:


184

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


3
잘 작동합니다. XML 또는 Java 코드에 추가 할 수 있습니다. Java 코드에서 잘 작동하고 xml에서는 많이 테스트하지 않았지만 작업을 수행해야합니다.
Mikooos

\ u0020도 \ u00A0도 ​​작동하지 않습니다. XML로 설정하거나 (XML의 미리보기에서도) setText ()를 사용하여 Java로 설정하지 않습니다. Android 4.1 및 4.2에서 모두 시도
Stephan Wiesner 2013

1
쉼표와 함께 작동하지 않습니다. 당신은 이러한 경우에 쉼표 후 줄 바꿈을 얻을
알렉스 Bonel

1
\ u00A0는 나를 위해 속임수를 쓰지 않습니다. 안드로이드 4.4.4, 5.0, 5.1 - 그냥 단어 조인 공간을하지 않습니다
마르셀 브로

1
Kotlin에서는 매우 잘 작동합니다. 모든 빈 공간을 이것으로 바꾸면 마지막 문자에서 생략됩니다. str.replace ( "", "\ u00A0")는 "Hello ..."대신 "Hello wor ..."를 산출합니다.
Seop Yoon

24

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


24

 읽기 쉬운 솔루션 을 사용 하는 것이 가능합니다. 헥스 코드를 기억하지 않는 한 텍스트에 \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 엔티티


Android는 문자를 잘 처리하므로 아포스트로피 항목을 만들 필요가 없습니다. <string name="original">Don’t wrap %1$s</string>예상대로 작동합니다.
Diti

1
@Diti 그의 아닌 아포스트로피 A의, RIGHT 단일 인용 MARK ; 비교 'VS를 . Android는 더 멋진 유니 코드 문자에는 문제가 없지만 이스케이프가 필요한 ASCII 0x27에는 문제가 있습니다. 엔티티는 단지 편의 일 뿐이며 유용 할 수있는 위치를 보여주기 위해 여기에 넣었습니다.
TWiStErRob

이것은 훌륭합니다 =) 감사합니다. 나는 이것이 훨씬 더 깨끗하고 읽기 쉽다는 것을 안다.
Alex Hart

좋은 대답, 감사합니다! 내가 가진 것에 동의 &nbsp;문자열에서하는 유니 코드보다 번역에 방법이 더 의미가있다\u00A0
마크 Attinasi

1
물론 @Seven, 추가 마지막 섹션 (또한 트릭)를 참조 con하고 param1같은 파일을.
TWiStErRob

18

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

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

또는

new TextView("Hello\u00A0world");

3

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

2

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

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);
}

1

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

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


4
그것은 \ u00A0
poitroae
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.