2012-06-14 13 views
5

Android tarafından kesilen metni nasıl bir elips haline getirebilirim? Bir cihazdaEl ile boyutlandırılan metin bir TextView'da nasıl alınır

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

bu TextView'un böyle gösterilir:

"Um longo texto a..."

nasıl metnin geri kalanını alabilirim

Ben bir TextView var?

"qui de exemplo" döndüren getRestOfTruncate() gibi bir şey arıyorum. . TextView.getLayout kullanma

+0

Ben senin Sorunun başlığını ve metnini sabit. Keşke senin için bir cevabım olsaydı, ama bunu yapmanın bir yolu olduğunu düşünmüyorum. Burada kullanım durumu nedir? –

+0

Teşekkürler @AustynMahoney, muhtemelen bunu yapmak için yapılmış bir şey olmalı, başka bir şey inşa edeceğim, sorun çok daha zor olacak, ama eğer burada yazıyorsam – ademar111190

+1

Kullanın android: text = "@ string/full_text İhtiyacınız olduğunda "xml düzeninde" ve "getString (R.string.full_text)" dilinde java kodunda. – yorkw

cevap

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

Mükemmel çalışın ama kodunuzu bir yazılanın içine yerleştirmem gerekiyor çünkü ilk önce metin görünümü tasarlanmalı, finishi bunu yapmalıyım: new Handler(). PostDelayed (kodunuzla çalıştırılabilir, 1 milissegundo); – ademar111190

+2

Sadece android'im varsa: singleLine = "true" '. Eğer 'false' olarak ayarladıysam ve 'android: maxLines'i' dışında bir sayıya ayarladıysam, o zaman bu yöntem her zaman tüm metni tamamen elipslenmemiş gibi döndürür. –

0

() getEllipsisStart (0) Sadece çalışırsa android: maxLines ayarlanır:

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; 
} 
İşte

android eğer çalışacak bir çözümdür SingleLine = "true"

Unutmayın: Bu görünüm zaten göründükten sonra çalışır.

Kullanımı:

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