2010-12-01 20 views
6

iyi, tüm sorularıma başlıkta sığdı. Uzun bir metni sütunlara/karelere ayırmam ve bunları görüntülemek için yerleştirmem gerekiyor. Birkaç gün boyunca çözümler için kazmaya başladım, ancak görevlerimin herhangi birini nasıl tamamlayacağına dair herhangi bir örnek veya açık bir belge bulamıyorum. Bazı StaticLayout ifadelerini gördüm, ancak nasıl kullanacağımı bilmiyorum. Metin yüksekliği için TextPaint'in getTextBounds yöntemini denedim, ancak genişlik sınırlaması yok ve sadece tek bir satırı ölçüyor gibi görünüyor (belki de yanlış bir şey yapıyordum).Sabit genişlikte metnin yüksekliği nasıl alınır ve bir çerçeveye uyan metin uzunluğu nasıl alınır?

Belki birisinin StaticLayout veya alt sınıf kullanımı örneği var mı?

Her şey "kağıt üzerinde" çok basit görünüyor: "çerçeve" oluştur, içine ne kadar karakter sığdıracağını kontrol et, çerçeveyi doldur ve yerleştir, metnin sonuna kadar tekrarla, ama nasıl yapılacağına dair bir şey bulamıyorum :)

+0

u kod test ettin? –

cevap

6

Sorunun kesin cevabını bilmiyorum, ancak genellikle grafik kitaplığındaki mevcut yöntemleri kullanarak yazı tipini ve boyutunu temel alarak bir metnin genişliğini ve yüksekliğini hesaplayabilirsiniz.

C# ve Java'da yaptım. C# olarak adlandırılır "MeasureString" ve Java, "FontMetrics".

DÜZENLEME:

bakınız bu kod yararlıdır if (Burada android SDK yok çünkü bunu derlenmiş edilmemiştir):

String myText="";  
    String tempStr=""; 

    int startIndex=0; 
    int endIndex=0; 

    //calculate end index that fits 
    endIndex=myPaint.breakText(myTest, true, frameWidth, null)-1; 

    //substring that fits into the frame 
    tempStr=myText.substring(startIndex,endIndex); 

    while(endIndex < myText.length()-1) 
    {   

     //draw or add tempStr to the Frame 
     //at this point 

     //set new start index 
     startIndex=endIndex+1; 

     //substring the remaining of text 
     tempStr=myText.substring(startIndex,myText.length()-1); 

     //calculate end of index that fits 
     endIndex=myPaint.breakText(tempStr, true, frameWidth, null)-1; 

     //substring that fits into the frame 
     tempStr=myText.substring(startIndex,endIndex); 
    } 

Benzer yöntemler Android için kullanılabilir:

breakText(String text, boolean measureForwards, float maxWidth, float[] measuredWidth) 

Ölçülen genişlik, maxWidth değerini aştığında, metnin erken devam etmesi için metni ölçün.

measureText(String text) 

İade metnin genişliği.

http://developer.android.com/reference/android/graphics/Paint.html

+0

android, @sniurkst çalışmamışsa, mükemmel bir cevabınız varsa lütfen gönderin. – Jayesh

İlgili konular