Android, TextView의 너비를 제한하고 텍스트 끝에 3 개의 점을 추가하는 방법은 무엇입니까?


317

나는이 TextView내가 문자를 제한 할 것인지를. 실제로, 나는 이것을 할 수 있지만 내가 찾고있는 것은 문자열 끝에 3 개의 점 (...)을 추가하는 방법입니다. 이것은 텍스트가 계속되었음을 보여줍니다. 이것은 내 XML이지만 텍스트를 제한하지만 점은 없습니다.

<TextView 
        android:id                      = "@+id/tvFixture"
        android:layout_width            = "wrap_content"
        android:layout_height           = "wrap_content"
        android:layout_toLeftOf         = "@id/ivFixture_Guest"
        android:text                    = "@string/test_06"
        android:lines                   = "1"
        android:ems                     = "3"
        android:gravity                 = "right"
        style                           = "@style/simpletopic.black" 
        android:ellipsize="end"/>

답변:


691

더 이상 사용되지 않음 :

android:singleLine="true"Textview에 하나 이상의 속성 추가

업데이트 :

android:ellipsize="end" 
android:maxLines="1"

3
방금 시도했을 때 singleLine이 필요합니다. 더 이상 사용되지 않는다고 말합니다.
EGHDK

41
android : singleLine = "true"는 사용되지 않으며 부작용이 있습니다. 대신 ellipsize = "말"과 맥스 = "1": 사용은 안드로이드
Hamidreza Hosseinkhani

1
사용의 "나쁜 부작용"은 singleLine무엇입니까? 참조 : 는 XML 속성 만일 Singleline 안드로이드에서 사용되지 않거나 아닌가요?
Suragch

1
btw, android : maxLines 원하는 경우 1보다 클 수 있습니다 :)
Touré Holder

1
누구든지이 메시지를 받았습니다 "W / StaticLayout : maxLineHeight는 -1이 아니어야합니다. maxLines : 1 lineCount : 1">?
COLD ICE

157

다음은 TextView하나의 선 (세 개의 점이 있거나없는) 을 강제하는 다양한 옵션을 가지고 놀면서 배운 것 입니다.

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

android : maxLines = "1"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:text="one two three four five six seven eight nine ten" />

이것은 텍스트를 한 줄로 강제합니다. 추가 텍스트는 숨겨져 있습니다.

관련 :

ellipsize = "end"

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:ellipsize="end"
    android:text="one two three four five six seven eight nine ten" />

이렇게하면 맞지 않는 텍스트가 잘리지 만 줄임표 (세 개의 점)를 추가하여 텍스트가 잘렸다는 것을 사용자에게 알릴 수 있습니다.

관련 :

ellipsize = "marquee"

<TextView
    android:id="@+id/MarqueeText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:maxLines="1"
    android:singleLine="true"
    android:ellipsize="marquee"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:text="one two three four five six seven eight nine ten" />

그러면 텍스트가 TextView에서 자동으로 스크롤됩니다. 참고 때로는 이 코드에서 설정해야합니다 :

textView.setSelected(true);

기발한 android:maxLines="1"하고 android:singleLine="true"만일 Singleline입니다 기본적으로 같은 일을해야하며, 이후 분명히 사용되지 않는 나는 그것을 사용하지 않는 것을 선호하지만, 나는 그것을 꺼내 때, 천막 스크롤 더 이상하지 않습니다. 촬영 maxLines아웃은하지만, 그 영향을주지 않습니다.

관련 :

scrollHorizontally가있는 HorizontalScrollView

<HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/horizontalScrollView">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxLines="1"
        android:scrollHorizontally="true"
        android:text="one two three four five six seven eight nine ten" />
</HorizontalScrollView>

이를 통해 사용자는 전체 텍스트 행을보기 위해 수동으로 스크롤 할 수 있습니다.


그러나 이것은 모든 단어의 끝에서 타원입니다. very_long_word_without_whitespace 중간에 ...를 추가하는 방법이 있습니까?
Tobias Reich

@TobiasReich, 나는 그것을 달성하기 위해 내장 된 방법을 모른다. Paint.measureText를 사용하여 직접 만들 수 있습니다 .
Suragch

때때로 당신은 app : layout_constrainedWidth = "true"도 필요할 것입니다
Dan Crisan

80

레이아웃 파일에서 TextView의이 속성을 사용해보십시오.

android:ellipsize="end"
android:maxLines="1"

31

너비를 한 줄로 제한하고 문자별로 제한하지 않으려면? 이후 singleLine사용되지 않으며, 다음과 함께를 사용하여 시도해 볼 수도 있습니다 :

android:maxLines="1"
android:scrollHorizontally="true"
android:ellipsize="end"

13

예. 당신이 사용할 수있는

android:maxLength="13"

이것은 texview 길이를 13으로 제한하지만 문제는 3 점 (...)을 추가하려고하면 textview 길이의 일부이므로 표시하지 않습니다.

     String userName;
     if (data.length() >= 13) {
            userName = data.substring(0, 13)+ "...";

     } else {

            userName = data;

    }
        textView.setText(userName);

이 외에도 당신은 사용해야합니다

 android:maxLines="1"

2
"..."대신 "\ u2026"을 사용하는 것이 좋습니다.
Zharro

이것은 단지 예일뿐입니다. Strings.xml에 문자열을 넣으면 유니 코드로 이동합니다. 여기에 넣고 싶은 특별한 이유가 있습니까?
Nayanesh Gupte

2
아니. 나는 개인적으로 유니 코드에서이 문자의 존재를 최근에
배웠고이

6

사용하다

  • android:singleLine="true"
  • android:maxLines="1"
  • app:layout_constrainedWidth="true"

전체 TextView모습은 다음과 같습니다.

    <TextView
    android:id="@+id/message_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="5dp"
    android:maxLines="1"
    android:singleLine="true"
    android:text="NAME PLACEHOLDER MORE Text"
    android:textColor="@android:color/black"
    android:textSize="16sp"

    android:textStyle="bold"
    app:layout_constrainedWidth="true"
    app:layout_constraintEnd_toStartOf="@id/message_check_sign"
    app:layout_constraintHorizontal_bias="0"
    app:layout_constraintStart_toEndOf="@id/img_chat_contact"
    app:layout_constraintTop_toTopOf="@id/img_chat_contact" />

<code> TextView </ code> 그림


5

Horizonal Recyclerview를 사용하고 있습니다.
1) 여기 CardView에서 사용할 때 TextView가 세로로 왜곡됩니다

android:ellipsize="end"
android:maxLines="1"

대담한 TextViews Wyman Group, Jaskolski를 확인하십시오 ... 여기에 이미지 설명을 입력하십시오

2) 그러나 타원과 함께 singleLine을 사용할 때-

android:ellipsize="end"
android:singleLine="true"

대담한 TextViews Wyman Group, Jaskolski를 확인하십시오 ... 여기에 이미지 설명을 입력하십시오

두 번째 솔루션이 제대로 작동했습니다 (singleLine 사용). 또한 OS 버전 : 4.1 이상 (8.0까지)에서 테스트했지만 충돌없이 정상적으로 작동합니다.


4

암호:

TextView your_text_view = (TextView) findViewById(R.id.your_id_textview);
your_text_view.setEllipsize(TextUtils.TruncateAt.END);

xml :

android:maxLines = "5"

예 :

마태 복음 13 장에서 제자들은 예수에게 왜 비유로 군중들에게 말씀했는지 물었습니다. "하늘 왕국의 신비를 아는 것은 너희에게 주어 졌으나 그들에게는 주어지지 않았다.

결과 : 마태 복음 13 장에서 제자들은 예수에게 왜 비유로 군중들에게 말씀했는지 물었습니다. 그는 대답했다.


4

사용하여 원하는 결과를 얻었습니다

android:maxLines="2"
android:minLines="2"
android:ellipsize="end"

트릭은 maxLines와 minLines를 같은 값으로 설정합니다 ... android : lines = "2"뿐만 아니라 트릭을 수행하지 마십시오. 또한 더 이상 사용되지 않는 속성을 피하고 있습니다.


4

텍스트보기를 위해 레이아웃에 다음 줄을 추가해야합니다

android:maxLines="1"
android:ellipsize="end"
android:singleLine="true"

이것이 효과가 있기를 바랍니다.


3

텍스트 뷰의 문자 수를 제한하고 텍스트 뒤에 (...)를 추가 할 수 있습니다. 5 글자 만 표시하고 그 후에 (...)를 표시해야한다고 가정하면 다음을 수행하십시오.

String YourString = "abcdefghijk";

if(YourString.length()>5){

YourString  =  YourString.substring(0,4)+"...";

your_text_view.setText(YourString);
}else{

 your_text_view.setText(YourString); //Dont do any change

}

약간의 해킹 ^ _ ^. 좋은 해결책은 아니지만. 그러나 나를 위해 일한 해결 방법 : D

편집 : 제한 번호에 따라 적은 문자 확인을 추가했습니다. 문자



3

와 작업하기 위해 안드로이드 : ellipsize의 속성, 당신은 제한해야 레이아웃 폭텍스트 뷰 그 같은 텍스트를 텍스트 뷰의 뷰에서 범위를 벗어입니다.

따라서 android : layout_width 속성이 여기서 중요한 역할을하며 적절하게 설정하십시오.

한 가지 는 다음과 같습니다.

<TextView        
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:ellipsize="end"
    android:text="This is a very long text to be displayed"
    android:textSize="12sp"
    android:maxLines="1"            
     />

자, 여기 경우 텍스트안드로이드 : 텍스트 = "이 표시 할 수있는 매우 긴 텍스트입니다" 와 텍스트 뷰에서보기를 벗어나 layout_width = "120dp"안드로이드 , 안드로이드 : ellipsize = "끝" 잘라야 할 텍스트를 하고 그 뒤에 ... (3 점) 을 두십시오. 즉, 매우 깁니다 ... TextView에 표시됩니다.



2

이 줄을 xml로 작성하면 다음을 수행 할 수 있습니다 textview.

android:singleLine="true"

2

@AzharShaikh의 접근 방식은 잘 작동합니다.

android:ellipsize="end"
android:maxLines="1"

그러나 TextView가 단어 (기본값)로 잘릴 문제가 있습니다. 다음과 같은 텍스트가 있는지 표시하십시오.

long_line_without_any_space_abcdefgh 테스트

TextView가 표시됩니다.

테스트...

그리고이 문제를 해결하고 공백을 유니 코드 중단없는 공백 문자로 바꾸면 TextView가 단어 대신 문자를 래핑합니다.

yourString.replace(" ", "\u00A0");

결과:

long_line_without_any_space_abc 테스트 ...


2
        <TextView
            android:id="@+id/product_description"
            android:layout_width="165dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:paddingLeft="12dp"
            android:paddingRight="12dp"
            android:text="Pack of 4 summer printed pajama"
            android:textColor="#d2131c"
            android:textSize="12sp"
            android:maxLines="2"
            android:ellipsize="end"/>

1

이 두 줄을 텍스트에 추가하십시오

android:ellipsize="end"
android:singleLine="true"

0

당신은 그것을 할 수 있습니다 xml:

<TextView 
    android:id="@+id/textview"
    android:maxLines="1" // or any number of lines you want
    android:ellipsize="end"
    />

3 Dots@ end maxLength="35"속성을 어떤 솔루션으로 넣을 수 있습니까?
Sagar

-1

당신은 단지 변경 ...

android:layout_width="wrap_content"

아래 줄을 사용하십시오

android:layout_width="match_parent"

.......

   <LinearLayout
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:layout_marginLeft="10dp"
       android:layout_marginTop="10dp"
       android:layout_toRightOf="@+id/visitBox"
       android:orientation="vertical" >

             <TextView
                  android:id="@+id/txvrequestTitle"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:singleLine="true"
                  android:text="Abcdefghighiklmnon"
                  android:textAppearance="? 
                  android:attr/textAppearanceLarge"
                  android:textColor="@color/orange_color" />

   </LinearLayout>

singleLine은 더 이상 사용되지 않습니다
Nick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.