2012-01-19 33 views
6

Làm thế nào tôi có thể nhận được chiều cao của một chuỗi cho trước?Làm thế nào tôi có thể nhận được chiều cao của một chuỗi cho trước?

enter image description here

Ví dụ,

  • abc nên trở về 0.
  • abcl nên trở về 0.
  • abcp nên trả lại khoảng cách từ dòng descnder đến đường cơ sở.
  • abclp nên trả lại khoảng cách từ dòng mô tả đến đường cơ sở.

Điều tốt nhất tôi có thể xuất hiện cho đến nay là

private int getDecender(String string, Paint paint) { 
    // Append "l", to ensure there is Ascender 
    string = string + "l"; 
    final String stringWithoutDecender = "l"; 

    final Rect bounds = new Rect(); 
    final Rect boundsForStringWithoutDecender = new Rect(); 
    paint.getTextBounds(string, 0, string.length(), bounds); 
    paint.getTextBounds(stringWithoutDecender, 0, stringWithoutDecender.length(), boundsForStringWithoutDecender); 
    return bounds.height() - boundsForStringWithoutDecender.height(); 
} 

Tuy nhiên, mã mùi của tôi là họ không đủ tốt. Có cách nào tốt hơn và nhanh hơn không?

Trả lời

-1

Bạn nên xem Paint.FontMetrics. Các thành viên gốc sẽ cung cấp cho bạn "Khoảng cách được đề nghị bên dưới đường cơ sở cho văn bản khoảng cách đơn."

+0

Câu hỏi về cách tìm hiểu, có bất kỳ ký tự nào có gốc không khác trong chuỗi đã cho không. –

+0

Xin lỗi, tôi đọc quá nhanh. Bạn có thể có giải pháp tốt nhất trong mã của bạn. – emidander

3

Thực ra tôi đang tìm kiếm cùng một chức năng. Nó chỉ ra có cách đơn giản hơn nhiều, bạn thậm chí không cần chức năng riêng biệt cho điều đó.

Nếu bạn chỉ cần gọi getTextBounds() trên một chuỗi nhất định, hộp giới hạn được trả về sẽ có thông tin đó.

Ví dụ:

paint.getTextBounds(exampleString1 , 0, exampleString1.length(), bounds); 

if (bounds.bottom > 0) Log.i("Test", "String HAS descender"); 
else Log.i("Test", "String DOES NOT HAVE descender"); 

Đơn giản chỉ cần nói bounds.top cho bạn biết đi lên của chuỗi (nó có giá trị âm như Y trục 0 điểm là đường cơ sở của chuỗi) và bounds.bottom cho bạn gốc của chuỗi (có thể là 0 hoặc giá trị dương cho các chuỗi có gốc).

Các vấn đề liên quan