Android의 TextView에서 텍스트를 감싸는 방법


86

누구든지 Android 플랫폼의 TextView에서 텍스트를 래핑하는 방법을 알고 있습니까? 즉, textview의 텍스트가 화면 길이를 초과하면 두 번째 줄에 표시되어야합니다.

다음을 검색하고 시도했습니다.

android:scrollHorizontally="false",
android:inputType="textMultiLine",
android:singleLine="false"

하지만 작동하지 않습니다 ..

누구든지 내가 어떻게 할 수 있는지 제안 할 수 있습니까?


7
TextView는 기본적으로 자동 줄 바꿈되어야합니다. 전체 레이아웃을 게시 할 수 있습니까?
danh32

혹시 Textview가 테이블 레이아웃 안에 있습니까? 그렇다면 답이 있습니다.
JohnFx

1
필자의 경우 약 6 개의 속성 (아래에 설명)을 추가하여 textview가 성공하지 않고 여러 줄에 걸쳐 텍스트를 줄 바꿈하도록 강제 한 후 속성이 있음을 알았습니다 android:inputType="textPersonName". 분명히 그것은 Android Studio 디자인 도구에 의해 추가되었습니다. 해당 속성을 제거하면 문제가 해결되었습니다! 줄 바꿈을 방지하는 다른 입력 유형도있을 수 있습니다.
LarsH

답변:


58

나 에게이 문제는 Android <4.0에서만 발생했습니다.

내가 사용한 매개 변수의 조합은 다음과 같습니다.

android:layout_weight="1"
android:ellipsize="none"
android:maxLines="100"
android:scrollHorizontally="false"

maxLines 수는 내 TextView 랩핑을 만든 무작위 최종 조각 인 것 같습니다.


9
나는 지금 그것의 오래된 스레드를 알고 있지만 내 결과를 게시 할 것이라고 생각했다. 'android : maxLines'만 사용하고 텍스트를 래핑했습니다. 응원 @Guykun
StuStirling

다시 말하지만, 이것은 단순히 TextView의 높이를로 설정하는 것과 match_parent같으며, 이는 추가 줄을 포함하도록 TextView의 높이를 확장하는 것과는 다릅니다.
SMBiggs 2016

52

제약 레이아웃

<TextView
android:id="@+id/some_textview"
android:layout_width="0dp"
android:layout_height="wrap_content"

app:layout_constraintLeft_toLeftOf="@id/textview_above"
app:layout_constraintRight_toLeftOf="@id/button_to_right"/>
  • 레이아웃 너비가 0인지 확인
  • 왼쪽 / 오른쪽 제약이 정의 됨
  • wrap_content의 레이아웃 높이는 확장을 위 / 아래로 허용합니다.
  • android:maxLines="2"수직 확장을 방지하도록 설정 (2는 예)
  • 타원은 확률이 높습니다. 최대 라인에 대한 좋은 아이디어android:ellipsize="end"

0dp 너비는 왼쪽 / 오른쪽 제약으로 위젯의 너비를 결정합니다.

왼쪽 / 오른쪽 제약 조건을 설정하면 텍스트가 줄 바꿈되는 위젯의 실제 너비가 설정됩니다.

제약 레이아웃 문서


예! 이것이 정확히 작동하는 방식입니다! 그냥 확인 당신은 0dp에 폭을 설정 만든다
Yoraco 곤잘레스에게

왼쪽 및 오른쪽 제약 조건을 설정하면 텍스트가 오른쪽 경계를 넘어 넘쳐나는 대신 줄 바꿈하는 데 도움이되었습니다
Jia Tse

31

(가)의 경우를 들어 TextView내부에 TableLayout상기 용액을 설정하는 android:shrinkColumns="1"TableLayout. ( 1랩핑하려는 TextView가있는 열 번호로 바꿉니다 . (0- 인덱싱))

AFAICT, 다른 속성은 TextView.

다른 경우는 여기에서 다른 답변을 참조하십시오.

FWIW, 처음에는

 <TextView
   android:id="@+id/inventory_text"
   android:layout_width="fill_parent"
   android:layout_weight="1"
   android:width="0dp"

하지만 그 결과 대화 상자 하단에 추가 빈 공간이 생겼습니다.


이것이 내가 찾던 것이었다! 그렇지 않으면 내 말은립니다
카슨 Holzheimer

12

2 개의 매개 변수를 사용해야합니다.

  • android:ellipsize="none" : 텍스트가 textview 너비에서 잘리지 않습니다.

  • android:scrollHorizontally="false" 텍스트는 필요한만큼 줄 바꿈합니다.


5
그것은 나를 위해 작동하지 않습니다. (FWIW, TableLayout의 TableRow에 TextView가 있습니다.)
aij

9

사용 app:breakStrategy="simple"에서 AppCompatTextView이 단락 레이아웃을 제어합니다.

세 개의 상수 값이 있습니다.

  • 균형이 잡힌
  • 고품질
  • 단순한

TextView xml에서 디자인

<android.support.v7.widget.AppCompatTextView
        android:id="@+id/textquestion"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:scrollHorizontally="false"
        android:text="Your Question Display Hear....Your Question Display Hear....Your Question Display Hear....Your Question Display Hear...."
        android:textColor="@android:color/black"
        android:textSize="20sp"
        android:textStyle="bold"
        app:breakStrategy="simple" />

현재 최소 API 레벨이 23 이상이면 코딩에서

yourtextview.setBreakStrategy(Layout.BREAK_STRATEGY_SIMPLE);

자세한 내용은이 BreakStrategy를 참조 하세요.

Textview breakStrategy 이미지


8

이렇게하면 문제가 해결 android:layout_weight="1"됩니다..


이로 인해 TextView가 확장되어 가능한 한 많은 공간을 차지하게되는데, 이는 Height를 match_parent. OP가 원하는 것과 똑같은 것은 아닙니다.
SMBiggs 2011

2
TableLayout의 경우 layout_weight="1"문제를 해결했습니다. 그러나 TextView를 포함하는 내 TableRow layout_height는 특정 값으로 설정되었습니다. 누군가에게 유용 할 수도 있습니다
kit

5

OK 여러분, 진실은 중간 어딘가에 있기 때문에 부모의 관점과 자녀의 관점에서 문제를 봐야합니다. 아래 솔루션은 스피너 모드 = dialogAndroid 버전에 관계없이 작동하는 경우에만 작동합니다 (문제 없음 .. Android에서 VD 및 DesireS => 2.2로 테스트).

  1. . 스피너의 (부모) 모드를 다음과 같이 설정하십시오.

    android:spinnerMode="dialog"  
    
  2. textview의 (자식 사용자 정의보기) 속성을 다음과 같이 설정합니다.

    android:layout_weight="1"  
    android:ellipsize="none"  
    android:maxLines="100"  
    android:scrollHorizontally="false"
    

나는 이것이 당신에게도 효과가 있기를 바랍니다.


'드롭 다운'모드에서 작동하도록 많은 것을 시도했지만 아무것도 작동하지 않았습니다. 이제 '대화'모드에 정착했습니다.
Mangesh 2015-08-09

4

android:maxEms와 함께 주어진 값으로 설정 하면 주어진 android:layout_weight="1"ems 길이에 도달하면 TextView가 래핑됩니다.


RelativeLayout에 배치 된 TextView에서도 작동합니다.
ayz4sci

몇 시간 동안 검색했습니다. constraintLayout에서도 잘 작동합니다.
TarekB

3

Android Studio 2.2.3의 inputType속성 아래에는 textMultiLine. 이 옵션을 선택하면 비슷한 문제가 해결되었습니다. 도움이 되었기를 바랍니다.


2
이 글고 치기가 아닌 텍스트 뷰입니다
PsychedelicSubstance

2

RecyclerView 내부 레이아웃 내부의 TextView에서 작업 중이었습니다. 예를 들어에 대한 텍스트가 잘려서 Read this message보았습니다 Read this. android:maxLines="2"TextView에서 설정 을 시도 했지만 아무것도 변경되지 않았습니다. 그러나 첫 번째 줄과 두 번째 줄에 android:lines="2"결과가 나왔습니다.Read thismessage


1

나는 같은 문제가 있었다. 변경 후 작동-

android:layout_width="wrap_content"

줄임표, maxLines 또는 layout_weight-모두 차이가 없었습니다. 주-상위 너비도 wrap_content로 설정됩니다.


1

당신이해야 할 일은 당신의 textview 너비 를 설정하는 것 입니다.

android : layout_width = "60dp"

너비를 원하는대로 변경할 수 있습니다. 긴 문장을 입력하여 다음과 같이 작동하는지 확인하십시오.

android : text = "세계적 수준의 소프트웨어 엔지니어가되고 싶습니다."


1

@Guykun의 접근 방식 시도

android:layout_weight="1" android:ellipsize="none" android:maxLines="100" android:scrollHorizontally="false"

또한 부모 너비가 콘텐츠를 래핑하도록 설정되어 있지 않은지 확인하십시오. 이것은 내가 놓친 것입니다.


0

Android 2.2를 사용하고 있으며 화면을 초과하면 textview가 자동으로 다음 줄로 이동합니다.

화면이 끝나기 전에 텍스트를 다음 줄로 이동하려면 추가하십시오 (자신의 dp 값을 입력하십시오). 이것은 텍스트 오른쪽에 그림이있는 경우에 유용합니다.

android:layout_marginRight="52dp"

0

이상하게도-코드에서 TextView를 만들었고 표준 항목 외에는 아무것도 설정하지 않았음에도 불구하고 포장했지만 직접 확인하십시오.

LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT,
            LayoutParams.WRAP_CONTENT);
childParams.setMargins(5, 5, 5, 5);

Label label = new Label(this);
label.setText("This is a testing label This is a testing label This is a testing label This is a testing labelThis is a testing label This is a testing label");
label.setLayoutParams(childParams);

params 정의에서 볼 수 있듯이 LinearLayout을 사용하고 있습니다. Label 클래스는 단순히 TextView를 확장합니다. 글꼴 크기와 글꼴 색상을 설정하는 것 외에는 아무것도하지 않습니다.

에뮬레이터 (API 레벨 9)에서 실행할 때 자동으로 텍스트를 3 줄로 줄 바꿈합니다.


이 코드의 사용에 유의하십시오 LinearLayout.LayoutParams childParams = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);. 대부분의 경우 당신이 "자동으로 자료"로 포장을 고려 않습니다
nemesisfixx

0

layout_with정확한 크기로 설정 하면 텍스트가 최대 너비를 채울 때 다음 줄로 넘쳐서 줄 바꿈 효과가 발생합니다.

<TextView
    android:id="@+id/segmentText"
    android:layout_marginTop="10dp"
    android:layout_below="@+id/segmentHeader"
    android:text="You have the option to record in one go or segments(if you swap options 
    you will loose your current recordings)"
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>

0

트릭은 textView 너비를 사용하는 것입니다. 다음과 같이 전용 번호로 만드십시오.

<TextView
    android:layout_width="300dp"
    android:layout_height="wrap_content"/>

나는 결과없이 많은 솔루션을 시도했지만 시도했습니다.

    android:ellipsize="none"
    android:scrollHorizontally="false"

랩 옵션을 트리거하는 유일한 것은 전용 너비입니다.


-1

다음과 같이 ScrollView에 TextView를 추가해야합니다.

<ScrollView android:id="@+id/SCROLL_VIEW"  
android:layout_height="150px"   
android:layout_width="fill_parent">  

<TextView   
   android:id="@+id/TEXT_VIEW"   
   android:layout_height="wrap_content"   
   android:layout_width="wrap_content"   
   android:text="This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header This text view should act as header" />  
 </ScrollView>

4
답장을 보내 주셔서 감사합니다. 그러나 제 목표는 가로 스크롤러를 넣지 않도록 줄 길이를 초과 할 때 텍스트를 감싸는 것입니다.
Sameer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.