Android TextView에서 줄 바꿈을 추가하는 방법은 무엇입니까?


157

TextView에 줄 바꿈을 추가하려고합니다.

제안 된 \ n을 시도했지만 아무것도하지 않습니다. 문자를 설정하는 방법은 다음과 같습니다.

TextView txtSubTitle = (TextView)findViewById(r.id.txtSubTitle);
txtSubTitle.setText(Html.fromHtml(getResources().getString(R.string.sample_string)));

이것은 내 문자열입니다. <string name="sample_string">some test line 1 \n some test line 2</string>

다음과 같이 표시되어야합니다.

some test line 1
some test line 2

그러나 다음과 같이 표시 some test line 1 some test line 2됩니다..

뭔가 빠졌습니까?


android : lines를 2 이상으로 설정 했습니까?
로비 연못

내 자막은 이미 6-9 줄까지 올라가고 텍스트를 다음 줄로 줄 바꿈하지만 나누고 싶다면 끊지 않습니다.
dropsOfJupiter

솔루션을 답변으로 게시하고 수락하면 사람들이 투표 할 수 있습니다.
bigstones

1
줄 바꿈과 그 부작용을 인코딩하는 다양한 방법을 설명하기 위해 작은 샘플 프로젝트를 만들었습니다. 스포일러 : \n실제로 가장 좋은 방법입니다. github.com/paour/StringResourceTest
Pierre-Luc Paour

이 질문이 왜 투표 되었습니까? 당신은 전혀 그것을 찾았습니까? 해결책은 매우 간단 Html.fromHtml()합니다 txtSubTitle.setText(getResources().getString(R.string.sample_string)). 해당 기능을 제거 하고 간단히 사용하십시오 .
버그는

답변:


222

\n 다음과 같이 나를 위해 작동합니다.

<TextView android:text="First line\nNext line"

87
그냥 \n혼자 일할 것입니다 ... \r아무 것도 하지 않는다고 생각하십시오 .
Peter Ajtai

5
\ r \ n 그것은 윈도우를위한 줄 바꿈이고 \ n은 리눅스를위한 줄 바꿈입니다
Guilherme Torres Castro

그것은 나를 위해 작동하지 않습니다 <TextView android : layout_width = "50dp"android : layout_height = "70dp"android : layout_weight = "1"android : background = "@ drawable / keypad1"android : gravity = "center"android : text = " 2 ABC "/>
AndroidRaji

1
문자열 주위에 따옴표를 추가 한 다른 변경 사항을 언급하지 않은 것은 오해입니다.
Patrick

2
'\ r'은 실제로 텍스트에서 'r'로 표시됩니다. 따라서 다른 사람들이 제안했듯이 '\ n'은 트릭을 수행합니다.
Miha Markic

93

알았어.

<string name="sample_string"><![CDATA[some test line 1 <br />some test line 2]]></string>

따라서 CDATA의 랩이 필요하며 내부에 html 태그로 추가됩니다.


3
이것을 문자열 리소스 & # xa; "안녕하세요! 첫 줄! & # xa; 이것은 두 번째 줄입니다"
RexSplode

3
이를 위해서는 Html.fromHtml()간단한 줄 바꿈에 약간 도움이되며 번역 공급자가 잘 지원하지 않는를 사용해야합니다 .
Pierre-Luc Paour

진심으로 남자? 그의 질문에서 문제를 찾을 수 없습니까?
버그는

68

Android 버전 1.6은 \ r \ n을 인식하지 못합니다. 대신 다음을 사용하십시오. System.getProperty ( "line.separator")

String s = "Line 1"
           + System.getProperty ("line.separator")
           + "Line 2"
           + System.getProperty ("line.separator");

3
공감! 이것은 나를 위해 일했다! 다음과 같은 형식으로 줄 바꿈을 추가하려는 경우 : textView.setText (string1 + System.getProperty ( "line.separator") + string2); 그런 다음 치료를합니다, 감사합니다!
Twice Circled

와트? Windows를 실행하는 Android 버전이 있습니까?
maaartinus

3
Xamarin을 사용하는 사람이라면 누구나 다음과 같습니다. Java.Lang.JavaSystem.LineSeparator ()
Steve

1
왜 단순히 System.lineSeparator ()가 아닌가?
George Z.

60

줄 바꿈 (\ n) 은 문자열 리소스 값을 다음과 같이 따옴표로 묶은 경우 에만 작동합니다.

<string name="sample_string">"some test line 1 \n some test line 2"</string>

다음과 같이 따옴표없이 넣으면 줄 바꿈을하지 않습니다.

<string name="sample_string">some test line 1 \n some test line 2</string>

예, 그렇게 쉽습니다.


3
이 인용문은 문자열 리소스의 특수 문자 또는 그리스어 또는 러시아어와 같은 언어와도 잘 작동한다고 덧붙이고 싶습니다 (문제가 발생하면)
datayeah

1
감사합니다, 나는 따옴표를 사용하여 긴 멀티 라인 텍스트에 대한 가독성을 유지하기 위해 더 나은 솔루션 생각 <string name="sample_string">"some test line 1 some test line 2 line 3" </string>
xinthink

1
인용 부호를 사용하면 공백을 항상 중요하게 만드는 것과 같은 다른 부작용이 있습니다 (따옴표없이 들여 쓰기와 같이 한 행에 여러 공백이 축소됨).
Pierre-Luc Paour

33

위의 모든 것을 시도했지만 내 자신에 대한 조사를 수행하여 줄 바꿈 이스케이프 문자를 렌더링하는 다음과 같은 솔루션을 만들었습니다.

string = string.replace("\\\n", System.getProperty("line.separator"));
  1. replace 방법을 사용하면 이스케이프 된 줄 바꿈 을 필터링해야합니다 (예 : '\\ n')

  2. 그런 다음 줄 바꿈 '\ n'이스케이프 문자의 각 인스턴스는 실제 줄 바꿈으로 렌더링됩니다.

이 예제에서는 JSON 형식의 데이터와 함께 Google Apps Scripting noSQL 데이터베이스 (ScriptDb)를 사용했습니다.

건배 : D


text.replace ( "\\ n", System.getProperty ( "line.separator"))
Mussa

18

이것은 나를 위해 일했다

android:text="First \n Second"

2
예제에는 레이아웃 리소스의 텍스트가 포함되어있는 것 같습니다. 현지화 할 수 없습니다.
Pierre-Luc Paour

17

이 문제에는 두 가지 방법이 있습니다. 문자열을 원시 문자열로 사용하는 경우 줄 바꿈 문자를 사용해야합니다. 예를 들어로 파싱하여 html로 사용하는 경우 Html.fromString두 번째 변형이 더 좋습니다.

1) 줄 바꿈 문자 \n

<string name="sample> This\nis a sample</string>

2) HTML 개행 태그 <br>또는<br />

<string name="sample> This<br>is a sample</string>

6
나는 그것을 하향 투표하지 않았지만 귀하의 코드가 잘못되었다고 생각합니다. "<br>"대신 "& lt; br>"가 필요합니다. <는 예약 된 기호이므로 작동하지 않습니다.
JPM December

<br>, <u>, <b><i>태그 탈출하지 않고 문자열 리소스에서 허용되는, 정확하게 적용된다 TextView.setText(resId). 섹션에 Context.getString(resId)싸여 있지 않으면을 사용하면 제거됩니다 CDATA.
Pierre-Luc Paour

16

이것은 나를 위해 일했습니다. 아마도 누군가이 도움이 될 것입니다.

TextView textField = (TextView) findViewById(R.id.textview1);
textField.setText("First line of text" + System.getProperty("line.separator") + "Linija 2");

11

XML을 사용하여 TextView 사용 android:singleLine = "false"또는 Java 를 선언 하는 경우txtSubTitle.setSingleLine(false);


아니 작동하지 않았다. Html.fromHtml () 및 문자열 리소스와 관련이 있습니까?
dropsOfJupiter

@dropsOfJupiter : Html.fromHtml () 호출이 무엇을 반환하는지 보셨습니까? String에 할당하고 디버거에서 살펴보고 싶습니다.
slund

10

Android Studio 0.8.9를 사용했습니다. 나를 위해 일한 유일한 방법은을 사용하는 것 \n입니다. CDATA로 포장 <br>하거나 <br />작동 하지 않았습니다 .



8

매우 쉬운 : "\ n"사용

    String aString1 = "abcd";
    String aString2 = "1234";
    mSomeTextView.setText(aString1 + "\n" + aString2);

\ n은 'LF'또는 줄 바꿈 인 ASCII 문자 0xA에 해당합니다.

\ r은 ASCII 문자 0xD에 해당하며 'CR'또는 캐리지 리턴입니다.

이것은 첫 번째 타자기에서 거슬러 올라갑니다. 여기서 줄 바꿈 만 수행하고 줄 바꿈 만 입력하거나 줄 바꿈 + 캐리지 리턴 (줄 시작으로 이동)을 선택할 수 있습니다

안드로이드 / 자바에서 \ n은 캐리지 리턴 + 줄 바꿈에 해당합니다. 그렇지 않으면 동일한 줄을 '덮어 씁니다'


6

현지화를 다시 확인하십시오. 가능하면 한 파일을 편집하려고 시도했지만 (로컬라이제이션) 실제로 내 경우와 같이 다른 파일을 사용하여 프로그램 합니다. 기본 시스템 언어는 러시아어이며 영어 현지화를 편집하려고합니다.

필자의 경우 작업 솔루션은 "\ n"을 줄 구분 기호로 사용하는 것입니다.

    <string name="string_one">line one.
    \nline two;
    \nline three.</string>

4

"&lt;br&#47;&gt;"\ n 대신 추가 할 수도 있습니다 .

<br/>에 대한 HTML 이스케이프 코드입니다.

그런 다음 TexView에 텍스트를 추가 할 수 있습니다.

articleTextView.setText(Html.fromHtml(textForTextView));

nea, 그렇게 생각하지 마십시오. 안드로이드는 실제로 말도 안되는 것을 인쇄합니다. 나는 노력했다. HTML에서는 잘 작동하지만 특히 Html.fromHTML ( "xml 파일의 my string")을 수행 할 때는 여기에서 작동하지 않습니다.
dropsOfJupiter

@drops-toString ==>을 잊지 마세요 Html.fromHtml(textForTextView).toString()--- 그리고 당신은 할 수 있습니다 : articleTextView.setText(Html.fromHtml("text before break<br/>text after break").toString());-------- 즉, <br/>바로 내부에서 사용하십시오fromHtml()
Peter Ajtai

&lt;br/>스타일 정보가 제거되지 않도록 충분해야합니다. (공식 문서를 기반으로 함)
jpmcosta

3

Android Studio의 String-Editor를 사용할 수도 있습니다. 자동으로 라인 브레이크와 같은 것들을 생성합니다 ...


2

으로는 Html.fromHtml단순히 내가 다음 줄에 문자열 2를 얻기 위해이 코드를 사용되지 않습니다.

textView.setText(fromHtml("String1 <br/> String2"));

.

@SuppressWarnings("deprecation")
    public static Spanned fromHtml(String html){
        Spanned result;
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) {
            result = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY);
        } else {
            result = Html.fromHtml(html);
        }
        return result;
    }

2

가장 쉬운 방법은 값 / 문자열로 이동하는 것입니다 (리소스 폴더에 있음)

거기에 문자열을 선언하십시오.

    <string name="example_string">Line 1\Line2\Line n</string>

그리고 특정 XML 파일에서 다음과 같은 문자열을 호출하십시오.

    <TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/example_string" />

1

다른 방법을 찾았습니다 : " android : maxWidth ="40dp " "속성 을 추가해야 합니다. 물론 완벽하게 작동하지는 않지만 줄 바꿈이 발생합니다.


1

\ n 나를 위해 일하지 않았습니다. xml을 text로 변경하고 아래와 같이 textview text 속성을 작성하여 문제를 해결할 수있었습니다.

android:text="Line 1
Line 2
Line 3

DoubleSpace"

희망적으로 이것은 \ n이 효과가 없다고 말한 사람들에게 도움이됩니다.


이것이 좋은 해결책이라고 확신하지 않습니다. 거기에 숨겨진 \n문자가 있습니다.
Almo

1

파일에서 텍스트를 읽는 중이므로 파일에 \ n을 추가하면 \ n이 텍스트에 나타나기 때문에 약간 다른 접근 방식을 취했습니다 .

    final TextView textView = (TextView) findViewById(R.id.warm_up_view);
    StringBuilder sb = new StringBuilder();
    Scanner scanner = new Scanner(getResources().openRawResource(R.raw.warm_up_file));
    while (scanner.hasNextLine()) {
      sb.append(scanner.nextLine());
      sb.append("\n");
    }

    textView.setText(sb.toString());

0

어쩌면 당신은 lf 를 넣을 수 있습니다 를 텍스트 는 있지만 표시되지 않습니까? 컨트롤 높이가 충분한 지 확인하십시오. 예를 들면 다음과 같습니다.

옳은:

android:layout_height="wrap_content"

잘못되었을 수 있습니다 :

android:layout_height="10dp"

0

필자의 경우 다음을 추가 하여이 문제를 해결했습니다.

android:inputType="textMultiLine"

입력 유형은 TextView가 아닌 ​​EditText입니다.
clauziere

0

이 시도:

         TextView calloutContent = new TextView(getApplicationContext());
         calloutContent.setTextColor(Color.BLACK);
         calloutContent.setSingleLine(false);
         calloutContent.setLines(2);
         calloutContent.setText(" line 1" + System.getProperty ("line.separator")+"  line2" );

0

이것이 어떻게 더 철저하게 작동하는지 설명하기 위해서는 더 완전한 대답이 필요하다고 생각합니다.

먼저 고급 형식이 필요한 경우 문자열 리소스에서 HTML을 사용하는 방법에 대한 설명서를 확인하십시오 .
그런 다음 <br/>등을 사용할 수 있습니다 . 그러나 코드를 사용하여 텍스트를 설정해야합니다.

일반 텍스트 인 경우 정적 문자열 resources 에서 개행 문자 (LF)를 이스케이프 처리하는 방법에는 여러 가지가 있습니다 .

문자열을 큰 따옴표로 묶기

가장 깨끗한 방법은 문자열을 큰 따옴표로 묶는 것입니다.
이렇게하면 공백이 축소되지 않고 표시된 그대로 정확하게 해석됩니다.
그런 다음 이 방법으로 줄 바꿈을 정상적으로 사용할 수 있습니다 (들여 쓰기를 사용하지 마십시오).

<string name="str1">"Line 1.
Line 2.
Line 3."</string>

일부 문자는이 모드에서 특수 이스케이프가 필요합니다 (예 :) \".

아래 이스케이프 시퀀스는 인용 모드에서도 작동합니다.

XML에서 한 줄을 사용하여 여러 줄 문자열을 나타내는 경우

XML에서 줄 바꿈을 탈출하는 가장 우아한 방법은 XML / HTML 엔티티를 사용하여 해당 코드 포인트 (16 진수에서 10 0xa는) 함께 &#xA;또는 &#10;. 이것은 어떤 문자도 피할 수있는 XML 방법 입니다.
그러나 이것은 인용 모드에서만 작동하는 것 같습니다.

또 다른 방법은 \n가독성에 부정적인 영향을 미치지 만 단순히 XML을 사용하는 것입니다 (XML의 특수 이스케이프 시퀀스가 ​​아니기 때문에 Android Studio에서는 강조 표시하지 않음).

<string name="str1">"Line 1.&#xA;Line 2.&#10;Line 3."</string>
<string name="str1">"Line 1.\nLine 2.\nLine 3."</string>
<string name="str1">Line 1.\nLine 2.\nLine 3.</string>

이스케이프 시퀀스 뒤에 개행 문자 나 공백을 포함하지 마십시오.이 공백은 추가 공간으로 해석되기 때문입니다.


-1

다음과 같이 텍스트 나누기를 사용하십시오 (\ n).

<string name="sample_string"><![CDATA[some test line 1 \n some test line 2]]></string>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.