TextView가 1 줄보다 큰 경우 어떻게 줄임표를 표시 할 수 있습니까?


100

작동하지 않는 다음 레이아웃이 있습니다.

<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:id="@+id/experienceLayout" 
    android:background="#ffffff" 
    android:layout_height="match_parent" 
    android:paddingLeft="6dp" 
    android:paddingRight="6dp" 
    android:paddingBottom="6dp" 
    android:paddingTop="6dp">

    <TextView 
        android:layout_weight="1" 
        android:id="@+id/experienceLabel" 
        android:text="Experience" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:layout_width="wrap_content" 
        android:textStyle="bold">
    </TextView>

    <TextView 
        android:id="@+id/experienceTextView" 
        android:text="TextView" 
        android:layout_height="wrap_content" 
        android:textColor="#000000" 
        android:layout_width="wrap_content" 
        android:ellipsize="end" 
        android:lines="1" 
        android:maxLines="1" 
        android:singleLine="true" 
        android:fadeScrollbars="false">
    </TextView>

</LinearLayout>

답변:


286

이것은 일반적인 문제입니다. 다음을 사용해보십시오.

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

.............. 두루마리 수평으로 작동시키는 "특수 소스"입니다.


12
이상한 ... 시도 android:scrollHorizontally="true"했지만 작동하지 않아 deprecated 속성을 사용해야했습니다 android:singleLine="true".
Gerardo Contijoch

1
scrollHorizontally실제 키입니다...
Rishabh 인스 더트 샤르마

scrollHorizontally? 분명히 가로 스크롤 효과를 원하지 않습니다.
filthy_wizard

@ user1232726 : 예, "가로로 스크롤합니다." 상식적으로 질문의 날짜와 응답 날짜를 살펴보십시오. 둘 다 현재 관련이 없을 수도 있다는 것은 말할 것도 없습니다 (댓글 전).
BonanzaDriver

인텔리 안드로이드 스튜디오에서 보고서 - maxLines와 ellipsize를 사용하면 응용 프로그램이 충돌 할 수 있습니다
Vaishnav Mhetre


25

이것을 사용하십시오

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

어떤 출력이 나오는지 완전히 인식하지 않고 이것을 사용하지 마십시오.

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

사용 maxlines = 1하면 대부분의 문자가 잘립니다.


12

여러 장치 / API에서 나를 위해 일한 방식은 프로그래밍 방식으로 다음과 같았습니다 (tv는 TextView입니다).

    if (tv.getLineCount() > 1) {
        int lineEndIndex = tv.getLayout().getLineEnd(0);
        String text = tv.getText().subSequence(0, lineEndIndex - 3) + "\u2026";
        tv.setText(text);
    }

2
이것은 가장 유용한 답변입니다 ... 모든 단일 API에서 작동하며 Utils 라이브러리로 쉽게 변환 할 수 있습니다.
Mariano Zorrilla 2015 년

1
당신은 줄임표 문자를 사용해야하는 \u2026대신 세 가지의 .문자
크리스 스틸 웰

@ChrisStillwell이 맞고 내 코드에서 줄임표 문자를 사용합니다. 답변을 수정했습니다. 감사합니다. :)
Marilia 2016 년

3

따라서 위의 모든 답변은 한 줄만 표시 한 다음 줄임표가 표시되어야한다는 요구 사항을 충족합니다. 그러나 특정 텍스트 줄 뒤에 줄임표를 표시하려면 다음을 사용해야합니다.

android:ellipsize="end"
android:maxLines="2"
android:singleLine="false"

이렇게하면 줄임표가 2 줄 뒤에 표시됩니다. 참고 : singleLine을 false로 지정하는 것이 중요합니다.


문서에 따르면 기본값은 false입니다. developer.android.com/reference/android/widget/…
Pierre


-1

android:singleLine더 이상 사용되지 않습니다. 제 경우에는에 대해 고정 된 높이를 얻어야했고 대신에 속성을 TextView사용했습니다 . 나는 이것이 나와 같은 문제를 가진 사람에게 도움이 될 것이라고 생각했습니다.android:linesandroid:maxLines

android:ellipsize="end"
android:lines="2"

사실이 아니다. 문서에 지원 중단에 대한 내용이 없습니다. developer.android.com/reference/android/widget/…
cesards

@cesards 흥미 롭습니다. -이 문서는 것을 말한다 developer.android.com/reference/android/R.attr.html#singleLine
Reaz Murshed
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.