2012-06-14 30 views
5

Làm thế nào để tôi nhận được văn bản mà đã được cắt ngắn bởi Android vào một dấu chấm lửng?Làm thế nào để có được những văn bản ellipsized trong một TextView

Tôi có một TextView:

<TextView 
    android:layout_width="120dp" 
    android:layout_height="wrap_content" 
    android:ellipsize="end" 
    android:singleLine="true" 
    android:text="Um longo texto aqui de exemplo" /> 

Trên một thiết bị TextView này được thể hiện như thế này:

"Um longo texto a..."

Làm thế nào để có được phần còn lại của văn bản?

Tôi đang tìm kiếm một cái gì đó giống như getRestOfTruncate() đó sẽ quay trở lại "qui de exemplo". .

+0

Tôi cố định tiêu đề và văn bản của câu hỏi của bạn. Tôi ước tôi có câu trả lời cho bạn, nhưng tôi không nghĩ có cách nào để làm điều này. Trường hợp sử dụng ở đây là gì? –

+0

Cảm ơn @AustynMahoney, có lẽ nên được một cái gì đó thực hiện để làm cho nó, nếu không, tôi sẽ xây dựng một cái gì đó, vấn đề là nó sẽ được nhiều khó khăn hơn, nhưng nếu tôi gửi ở đây – ademar111190

+1

Sử dụng 'android: text = "@ string/full_text "' trong bố cục xml và 'getString (R.string.full_text)' trong mã java bất cứ khi nào bạn cần. – yorkw

Trả lời

5
String text = (String) textView.getText().subSequence(textView.getLayout().getEllipsisStart(0), textView.getText().length()); 
+0

Làm việc hoàn hảo nhưng tôi cần chèn mã của bạn bên trong một postRunnable bởi vì đầu tiên textview phải được thiết kế, trong finishi tôi thực hiện điều này: new Handler(). PostDelayed (runnable với mã của bạn, 1 milissegundo); – ademar111190

+2

Điều này chỉ hoạt động nếu tôi có 'android: singleLine =" true "'. Nếu tôi đặt nó thành 'false' và đặt' android: maxLines' thành một số khác ngoài ', thì phương thức này luôn trả về toàn bộ văn bản như thể nó không bị bỏ qua ở tất cả. –

0

Sử dụng textView.getLayout() getEllipsisStart (0) chỉ hoạt động nếu android: singleLine = "true"

Đây là một giải pháp mà sẽ làm việc nếu android: Maxlines được thiết lập:

public static String getEllipsisText(TextView textView) { 
    // test that we have a textview and it has text 
    if (textView==null || TextUtils.isEmpty(textView.getText())) return null; 
    Layout l = textView.getLayout(); 
    if (l!=null) { 
     // find the last visible position 
     int end = l.getLineEnd(textView.getMaxLines()-1); 
     // get only the text after that position 
     return textView.getText().toString().substring(end); 
    } 

    return null; 
} 

Hãy nhớ rằng: tính năng này hoạt động sau khi chế độ xem đã hiển thị.

Cách sử dụng:

textView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      textView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      Log.i("test" ,"EllipsisText="+getEllipsisText(textView)); 
     } 
    }); 
Các vấn đề liên quan