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


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.