공백의 끝 및 / 또는 시작 부분에 공백을 유지하는 방법은 무엇입니까?


358

리소스 / 값 파일에서이 두 문자열을 연결해야합니다.

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>

나는 이렇게한다 :

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+total_flips+getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

그러나 첫 번째 줄의 끝과 두 번째 줄의 시작 부분의 공백이 사라졌습니다 (토스트가 표시 될 때) ...

어떻게해야합니까?

대답은이 문서 링크의 어딘가에 있다고 생각합니다.

아니면 &amp ;"&"문자를 사용하는 것과 같은 것 입니까 ??


2
몇 가지 좋은 답변이 있지만 그중 누구도 나를 위해 일하지 않습니다 (내 의견 참조). 현상금은 실제 공간 문자 (U + 0020)를 문자열 리소스의 첫 번째 또는 마지막 문자로 얻는 방법을 제공하는 모든 답변에 대한 것입니다.
— 토마스

3
험악한 불쾌한 안드로이드 :(
— Vlad Spreys

답변:


502

문자열 형식을 사용하더라도 문자열의 시작 또는 끝에 공백이 필요한 경우가 있습니다. 이 경우으로 탈출 \하거나 xml:space속성이 도움이 되지 않습니다 . &#160;공백에는 HTML 엔터티 를 사용해야합니다 .

&#160;깨지지 않는 공백에 사용하십시오 . 일반 공간에
사용하십시오 &#032;.


12
이런 종류의 작동하지만 일반 공간 대신 ​​비 분리 공간 (U + 00A0)을 삽입합니다. 상황에 따라 바람직하지 않을 수 있습니다.
— 토마스

50
& # 160이 작동하지 않습니다 ... xml 편집기에서 오류가 발생하여 프로젝트를 빌드 할 수 없습니다 ... \ u0020 제대로 작동합니다!
— jcamacho

10
끝에 세미콜론 (;)을 추가해야합니다.
— user1010160

36
\ u0020이 일반적으로 더 나은 솔루션입니다. & # 032; html을 구문 분석해야하며 경우에 따라 공간이 없어 무작위로 무시 될 수 있습니다
— HaydenKai

5
API 25 에뮬레이터에 배포하는 Android Studio 3.2에서을 사용했는데 &#032;빌드 오류가 없지만 공간은 여전히 ​​무시되었습니다. &#160;일했지만 깨지지 않는 공백은 원하지 않습니다. 나는 단지 일정한 공간을 원합니다. \u0020일했다.
— 히스 국경

489

나는 같은 문제에 부딪쳤다. 화면상의 필드 이름을 나타내는 리소스 문자열 끝에 공백을 남기고 싶었습니다.

이 문제 보고서에서 해결책을 찾았습니다 : https://github.com/iBotPeaches/Apktool/issues/124

이것은 Duessi가 제안한 것과 같은 생각입니다. \u0020보존하고자하는 빈 칸을 XML에 직접 삽입하십시오 .

예 :

<string name="your_id">Score :\u0020</string>

교체는 빌드시에 완료되므로 게임 성능에 영향을 미치지 않습니다.


잘 작동합니다. 사용과 & # 160;의 차이점이 무엇인지 궁금합니다.
— 안드로이드 개발자

3
@androiddeveloper, \ u는 유니 코드 문자를 이스케이프 시퀀스로 나타냅니다 (파일에서 직접 유니 코드 문자가 아님). & # nnn; html 엔터티를 나타냅니다. 즉, html 구문 분석되는 xml 문자열 (텍스트보기에서 사용될 때 기본적으로 사용됨)에 의존한다는 의미입니다. 참조 w3schools.com/html/html_entities.asp
— greg7gkb

@ greg7gkb 흥미롭지 만 기본적으로 몰랐습니다. 문자열 리소스에서 "setText"를 사용하면 동일하게 작동한다는 의미입니까?
— Android 개발자

@androiddeveloper 예, 방금 코드에서 이것을 확인했습니다. 문자열 xml 파일에 html 엔티티를 가질 수 있으며 기본적으로 setText (int resId)를 사용하여 변환됩니다. 예 : <string name = "test"> T & # 160; S & # 160; T & # 160; </ string>.
— greg7gkb

5
\u0020ASCII 코드의 공간입니다. 이것이 ASCII인지 확인해야했기 때문에 이것이 내 프로젝트에 가장 적합한 선택이었습니다.
— OneWorld

138

이 문서 는 인용이 효과가 있다고 제안합니다.

<string name="my_str_spaces">" Before and after? "</string>

2
보장합니까<string name="my_str_spaces">" Before <b>and</b> after? "</string>
— Prateek

5
유니 코드 문자를 사용하는 것보다 이처럼! 감사!
— Suant Anantwar

2
불행히도 Passolo와 같은 일부 현지화 도구는 따옴표 앞에 자동으로 슬래시를 추가합니다. 문자열은 <string name = "my_str_spaces"> \ "이전과 이후? \"</ string>이됩니다. 따라서이 인용 부호는 텍스트로 나타납니다. 따라서이 경우 \ u0020을 사용하는 것이 좋습니다.
— Fox

설명서의 어느 곳에서도 언급되지 않았습니다. 내가 볼 수있는 가장 가까운 것은 Enclose the entire string in double quotes ("This'll work", for example)탈출을 논의하는 곳 Single quote (')입니다.
— 히스 국경

이것은 나를 위해 작동하지 않습니다
— 제임스 리오 단

38

strings.xml 파일에서 "\ u0020"공간에 UTF 코드를 사용합니다.

<string name="some_string">\u0020The name of my string.\u0020\u0020</string>

잘 작동합니다. (Android는 UTF 코드를 좋아합니다)


2
이것은 받아 들인 대답이없는 곳에서 나에게 효과적이었습니다.
— 랜스

1
기존 답변에 새로운 것이 있습니까?
— user905686

21

이 질문은 오래되었지만 현재 가장 쉬운 방법은 따옴표를 추가하는 것입니다. 예를 들면 다음과 같습니다.

<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>

이것은 완벽하게 작동합니다. 원하는 텍스트를 할당량 "텍스트"로 둘러싸십시오
— Tarun Kumar

10

너비가 다른 공간을 확보 할 수 있습니다.

<string name="space_demo">|&#x20;|&#x2009;|&#x200A;||</string>

| 스페이스 | 얇은 공간 | 헤어 스페이스 | 공간이 없다 |

심상:

여기에 이미지 설명을 입력하십시오


8

정말로 당신이하고있는 방식으로하고 싶다면 공백을 탈출하여 관련이 있다고 말해야한다고 생각합니다.

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>

그러나 이것을 위해 문자열 형식 을 사용 합니다 . 다음과 같은 것 :

<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>

그때

String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);

1
백 슬래시로 이스케이프하면 작동하지 않습니다 (적어도 나를 위해). 형식 문자열을 사용하는 것이 일반적으로 훌륭한 솔루션이지만 항상 그런 것은 아닙니다. 예를 들어 String.format게임에서 바람직하지 않은 많은 메모리 할당이 발생합니다.
— 토마스

공백을 이스케이프 처리 ( "\"사용)해도 효과가 없었습니다.
— 안드로이드 개발자

텍스트가 모두 같은 스타일로 표시되는 경우에만 서식이 작동합니다. 제 경우에는 합쳐지는 두 가지가 대담하고 다른 색입니다.

5

문자열 리소스 값과 함께 ""를 사용하십시오.

예 : "공백이있는 값"

또는

공백에는 \ u0020 코드를 사용하십시오.


4

잘 작동합니다 \ u0020

<string name="hi"> Hi \u0020 </string>
<string name="ten"> \u0020 out of 10  </string>
<string name="youHaveScored">\u0020 you have Scored \u0020</string>

자바 파일

String finalScore = getString(R.string.hi) +name+ getString(R.string.youHaveScored)+score+ getString(R.string.ten);
               Toast.makeText(getApplicationContext(),finalScore,Toast.LENGTH_LONG).show();

이 스크린 샷 을 보여주는 이미지


2

프로그래밍 방식으로 공간을 추가하기 위해 인수를 만들 수 있습니다. 이러한 경우는 종종 연결에 사용되기 때문에 광기를 멈추고 오래된 것을하기로 결정했습니다 + " " +. 이것들은 대부분의 유럽 ​​언어 에서 의미가 있습니다.


1

여기에있는 모든 대답은 나를 위해 작동하지 않았습니다. 대신, 문자열 끝에 공백을 추가하려면 XML이 작업을 수행하십시오.

<string name="more_store">more store<b> </b> </string>

0

나는 안드로이드에 대해 전혀 모른다. 그러나 이것은 일반적인 XML 공백 처리처럼 보인다-요소 내에서 앞뒤 공백은 일반적으로 중요하지 않은 것으로 간주된다. 시도 xml:space:

<string name="Toast_Memory_GameWon_part1" xml:space="preserve">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2" xml:space="preserve"> flips !</string>

불행히도 xml:space무시되는 것 같습니다.
— 토마스

0

이것은 실제로 질문에 대답하지 않을 수도 있지만 (XML에서 공백을 유지하는 방법) 근본적인 문제를보다 우아하게 해결할 수 있습니다.

XML 리소스에만 의존하는 대신 형식 문자열을 사용하여 연결하십시오. 먼저 공백을 제거하십시오.

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>

그런 다음 문자열을 다르게 만듭니다.

String message_all_pairs_found = 
      String.format(Locale.getDefault(), 
                    "%s %d %s", 
                    getString(R.string.Toast_Memory_GameWon_part1),
                    total_flips,
                    getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

0

를 사용하는 솔루션도 있습니다 CDATA. 예:

<string name="test"><![CDATA[Hello          world]]></string>

그러나 일반적으로 \u0020충분 하다고 생각 합니다.


-1

나중에 다른 문자열과 연결하기 위해 공간이 필요한 경우 문자열 정의에 인수를 추가하는 문자열 형식 접근법을 사용할 수 있습니다.

<string name="error_">Error: %s</string>

그런 다음 문자열 형식을 지정하십시오 (예 : 서버에서 오류를 반환 한 경우 그렇지 않은 경우 getString(R.string.string_resource_example)).

String message = context.getString(R.string.error_, "Server error message here")

결과 :

Error: Server error message here

-6

xml : space = "preserve"에서는 작동하지 않습니다

그래서 나는 그것을 가장 빠른 방법으로했습니다 =>

필요한 곳에 + ""+를 추가했습니다 ...

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);

2
Java 문자열 리터럴을 혼합하려는 경우 리소스를 사용하는 요점은 무엇입니까?
— 크리스토퍼 존슨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.