2012-06-14 14 views
5

Come faccio a ottenere il testo che è stato troncato da Android in un puntino di sospensione?Come ottenere il testo ellittico in una TextView

ho un 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" /> 

Su un dispositivo presente TextView è mostrato in questo modo:

"Um longo texto a..."

Come faccio ad avere il resto del testo?

Sto cercando qualcosa come getRestOfTruncate() che restituirebbe "qui de exemplo". .

+0

ho fissato titolo e il testo della vostra domanda. Vorrei avere una risposta per te, ma non penso che ci sia un modo per farlo. Qual è il caso d'uso qui? –

+0

Grazie a @AustynMahoney, probabilmente dovresti fare qualcosa per farlo, altrimenti, costruirò qualcosa, il problema è che sarà molto più difficile, ma se inserisco qui – ademar111190

+1

Usa 'android: text =" @ string/full_text "' nel layout xml e 'getString (R.string.full_text)' nel codice java ogni volta che ne hai bisogno. – yorkw

risposta

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

Funziona perfettamente ma ho bisogno di inserire il tuo codice all'interno di un postRunnable perché prima deve essere disegnata la textview, in finishi lo faccio: new Handler(). PostDelayed (eseguibile con il tuo codice, 1 milissegundo); – ademar111190

+2

Funziona solo se ho 'android: singleLine =" true "'. Se l'ho impostato su 'false' e ​​impostato' android: maxLines' su un numero diverso da ', questo metodo restituisce sempre l'intero testo come se non fosse affatto ellittico. –

0

Utilizzando textView.getLayout() getEllipsisStart (0) funziona solo se Android: SingleLine = "true"

Ecco una soluzione che funziona se Android: maxLines è impostato:

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; 
} 

Ricorda: questo funziona dopo che la vista è già visibile.

Usage:

textView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
     @Override 
     public void onGlobalLayout() { 
      textView.getViewTreeObserver().removeOnGlobalLayoutListener(this); 
      Log.i("test" ,"EllipsisText="+getEllipsisText(textView)); 
     } 
    }); 
Problemi correlati