2010-07-30 23 views
5

Zaman değiştiren ve çalışan metni gösteren bir TextView var. TextView'ın kaç satır aldığını görmek ve buna göre farklı işlevler yapmak için View.getLineCount() yöntemini kullanmak istiyorum. Sorun, TextView'ın kaç tane hattın gerektiğini bilmesi gereken aynı yöntemde topladığı satır sayısını belirlemem gerekiyor. İki arama arasında View.invalidate() aramayı denedim ama hiçbir şey düzeltmek için görünmüyordu. Mümkünse görünümü mümkün kılmadan satır sayısını ölçmek istiyorum ama eğer bunu yapmak zorunda kalırsam bunu da yapmaya açık olacağım. Bu yeterli değilse ve daha spesifik olmaya çalışacağım zaman bana bildirin. Teşekkürler!Android: Oluşturmadan önce View of Size boyutunu ölçün

cevap

1

Bu, aslında Android'de gerçekten karmaşık bir sorun olabilir. Metni ayarladığınız anda (yani, görünüm oluşturulmadan veya oluşturulmadan önce) bilmeniz gerekirse, yalnızca gerçek seçenek StaticLayout'u kullanmaktır. böylece,

yourTextView.getViewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
    @Override 
    public void onGlobalLayout(){ 
     yourTextView.getLineCount(); 
    } 
} 

onGlobalLayout birden çok kez çağrılabilir ve bazen (herhangi bir nedenle) Ben görünümler aslında henüz ortaya koydu olmadığını tespit ettik: Eğer yakın zaman işlemek kadar bekleyebilir, bir viewTreeObserver kullanabilirsiniz Bazı girişler yapmalı ve sonuç ne olursa olsun aslında anlam kazanır (yani satır sayısı> 0).

StaticLayouts, görünümünüzün ve satır sayınızın boyutunu size verebilecek daha karmaşık bir alternatiftir. Onlar düzgün çalışması için biraz değişiklik yapmak gerekebileceğini ve size ölçmek için çalışıyoruz görünümden boya kullanmak sağlayabiliriz:

yourTextView.setText(newText); 
//the last boolean should be true if you're using padding on your view 
StaticLayout measure = new StaticLayout(yourTextView.getText(), yourTextView.getPaint(), 
    maxAvailableWidthForYourTextView, Layout.Alignment.ALIGN_NORMAL, 1.0f, 1.0f, false) 

int numberOfLines = measure.getLineCount(); 
sen hazırsanız

(veya zaten var) TextView sınıflandırma seni onSizeChanged veya onMeasure geçersiz kılabilir ve orada satır sayısını elde etmeye çalışın. Yine, ağaç gözlemcisinde olduğu gibi, bazen görüşünüzün gerçekte ölçülmesinden önce bunlar çağrılabilir, bu nedenle bu yöntemlerde aldığınız değeri anlamlı kılmak için kontrol etmeniz gerekebilir.

İlgili konular