2010-08-04 7 views
12

Ben şuna benzer bir düzen vardır:Android'de bir TextView'da ne kadar metnin sığacağını nasıl belirleyebilirim?

[TextView 1] [TextView 2] 
[ TextView 2 spill-over ] 

Esasen, bir sonraki satıra kaydırmak için TextView 2 içeriğini gerekiyor, ama nerede TextView'un 1 başlar başlar. Çizelge 2'deki boşluktan çıkmadan önce ne kadar metnin TextView 2'ye sığacağını bilseydim, metnin geri kalanını alıp ilk ikinin altında başka bir TextView'a yerleştirebileceğimi düşünüyordum. Bu yüzden ne kadar metnin bir TextView'e sığacağını ölçmem gerekiyor (ki bu zor olabilir, çünkü anlayabildiğim kadarıyla, Android bir TextView'daki metni iyi bir konumda kırmaya çalışacak, böylece bir kelimeyi kırmayacak. Ortadan kaçınılabilir) veya bunun nasıl yapılacağı konusunda yeni bir fikre ihtiyacım var.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır. peşin

sayesinde

groomsy

+0

, ben çok daha karmaşık buna değer olacağını olacaktır bir his var. Neden sadece TextView2'nizin metnini textview 1'e ekleyemiyorsunuz? – Falmarri

+1

Farklı biçimlendirme. Ayrıca, TextView 1 bazen bir ImageView olabilir. Her şeyi bir Web Görünümü'ne koymayı düşündüm, ama 2 satırda nasıl durduğumu bilmiyorum. – groomsy

+0

http://stackoverflow.com/questions/7259016/scale-text-in-a-view-to-fit/7259136#7259136 – Ronnie

cevap

9

Ne yazık ki, Paint.breakText iki satırlık TextView'da göründüğü gibi aynı sonucu döndürmedi.

Ancak bu

int numChars = textView.getLayout().getLineEnd(1); 

(kullanım numberOfLines - 1 kendisine parametre olarak) çalışmış Sen yapmak için iki TextView'lar gerekmez

Ref http://developer.android.com/reference/android/text/Layout.html#getLineEnd(int) Set individual lines of TextView to different width

+0

için cevap bulamadım. Bu bana doğru bir yol ile doğru yolda gidiyor. Bir TextView özel kırpma/"elipsizleştirme" olduğunda, getLineCount ve getLineStart'ın bir kombinasyonu benim için hile yaptı. – loeschg

+0

Ayrıca, getLayout() işlevi null ile ilgili bir sorun yaşayan herkes için bu soruyu kontrol edin. http://stackoverflow.com/questions/19157650/how-to-get-height-of-view-inside-adapter-for-creating-sized-bitmap – loeschg

+0

@Ioeschg 'getlayout()' null' döndürür, ancak yukarıda verilen bağlantı yararlı değildir. Neyin yanlış gittiğini söyleyebilir misin? – Ammar

6

Sen TextView2 metin boyutu ile bir Boya nesnesi oluşturabilir ve TextView2 genişliği sığmaktadır kaç karakter ölçmek için breakText() kullanabilirsiniz.

(Bu denenmemiş kodudur - küçük değişiklikler gerekebilir)

String textToBeSplit = arbitraryText; // Text you want to split between TextViews 
float textView2Width = somehowGetItsWidth; // TextView2's width 
float myTextSize = textView2.getTextSize(); 

Paint paint = new Paint(); 
paint.setTextSize(myTextSize); // Your text size 
int numChars = paint.breakText(textToBeSplit, true, float textView2Width, null); 

numCharstextToBeSplit birçok karakterler görünümler arasında bölmek için sağlayarak, TextView2 genişliği nasıl sığacağı anlatır.

+0

Kaba örnek için teşekkür ederiz. Bunun üzerinde çalışacağım ve nasıl ortaya çıktığını anlatayım. – groomsy

+0

benim için çalışmıyor. Her zaman sıfır – shantanu

+1

döndü ve bunu çalıştı ve neredeyse işe yaradı. Sorun, TextView'ın, özellikle birden fazla satıra sahip olduğunda biraz farklı bir yaklaşım kullanmasıydı. Sayı 2-3 karakter olacaktır. Bir cevap olarak yayınlayacağım daha iyi bir çözüm buldum – dparnas

2

Bu, her zaman mümkün olduğunca az sayıda görünüm kullanmalısınız ve aynı metin görünümü için iki stilin olması için bir kaşınılabilir kullanabilirsiniz. Örneğin ile
: Bu mümkün değilse

TextView tv = (TextView) findViewById(R.id.textview); 
SpannableString text = new SpannableString(myString); 

text.setSpan(new TextAppearanceSpan(getContext(), R.style.myStyle), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
text.setSpan(new TextAppearanceSpan(getContext(), R.style.myNextStyle), 6, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

tv.setText(text, TextView.BufferType.SPANNABLE);