2012-12-27 28 views
6

Tôi không thể tìm thấy bất cứ nơi nào có một đề cập đến cách getTextSize() trong Textview được đo. Từ các bài kiểm tra trực quan, nó dường như không bao gồm các hậu duệ, nhưng dường như bao gồm các phần tử tăng dần. Nó không xuất hiện để bắt đầu chính xác từ đường cơ sở cũng.Android TextView getTextSize() hiện nó bao gồm con cháu, ascenders

http://en.wikipedia.org/wiki/Descender

Đây là đề cập gần nhất của nó nhưng Romain Guy từ Google chỉ cần bỏ qua một phần của câu hỏi.

http://www.mail-archive.com/[email protected]/msg08514.html

Như tôi cần điều này như tôi đang sử dụng Compound Drawables và tôi cần để có thể sắp xếp các drawable đến các văn bản trên các thiết bị khác nhau.

Đây là mã tôi đã sử dụng để thử nghiệm trên một hợp chất có thể vẽ được một vòng tròn mà chạm mép

tvData.setTextSize(TypedValue.COMPLEX_UNIT_PX, 100); 
tvData.setText("agB5ãÂ"); 

int size = (int)tvData.getTextSize(); 
Drawable img = getResources().getDrawable(R.drawable.circle_white_full_72).mutate(); 
img.setBounds(0 , 0 , size , size); 
tvData.setCompoundDrawables(null, null, img, null); 

Đây là kết quả http://i.imgur.com/zUEzB.png

như bạn có thể nhìn thấy nó dường như không sử dụng xuống của và ascenders.

Dưới đây là hình ảnh có thể vẽ được, nếu những người khác muốn kiểm tra http://i.imgur.com/Yhf8b.png

Khi thay đổi hình ảnh đến 80% kích thước văn bản sử dụng

int size = (int)tvData.getTextSize() *80/100; 

Dưới đây là kết quả, với hình ảnh hoán trên trên cùng của hình ảnh 100%. Có lẽ setCompoundrawables đang làm riêng của nó rộng

enter image description here

tôi đã cố gắng đo trung điểm của phông chữ và drawable và nó tắt. Dưới đây là một hình ảnh làm nổi bật nó enter image description here

Cuối cùng tôi đã di chuyển 50pixels có thể vẽ sang trái, và sau đó đo đầu ra và nó bằng một nửa chiều cao của đường cơ sở phông chữ đến đường cơ sở, vì setTextSize được đặt ở 100px.

Android phải đang sử dụng một số bố cục khác để chia tỷ lệ và định vị đối tượng có thể vẽ được. Có lẽ tôi nên tạo một câu hỏi khác cho việc này. Đây là hình ảnh làm nổi bật đường cơ sở. enter image description here

+0

Tôi biết chiều cao phông chữ có nghĩa là "bao gồm ascenders, nhưng không phải con cháu", nhưng tôi dường như không thể tìm thấy một tài liệu tham khảo có thẩm quyền để trả lời câu hỏi của bạn. Vì vậy, bây giờ, bằng chứng giai thoại sẽ phải làm: Tôi đã luôn luôn hiểu "chiều cao font" để có nghĩa là bạn mô tả. – Barend

+0

Hãy suy nghĩ về nó, "từ đường cơ sở đến đường cơ sở" là tương đương và có ý nghĩa hơn trong miền. – Barend

+0

@BarendGarvelink Tôi tin rằng điều đó sẽ dẫn đầu. – kcoppock

Trả lời

3

Từ một số thử nghiệm ánh sáng, nó dường như là từ đi lên đến gốc (kích thước văn bản = gốc - đi lên). Đã làm một số gỡ lỗi với một TextPaint để xác minh, và chỉ là một chút cụ thể hơn, tôi đã làm:

Paint.FontMetricsInt metrics; 
for(int i = 1; i < 100; i++) { 
    mTextPaint.setTextSize(i); 
    metrics = mTextPaint.getFontMetricsInt(); 
    if((metrics.descent - metrics.ascent) != i) Log.v("type", "Not equal"); 
} 

Và nó vẫn đúng cho mỗi giá trị.

+0

đây là thử nghiệm tôi đã làm tvData.setTextSize (TypedValue.COMPLEX_UNIT_PX, 100); \t \t tvData.setText ("agB5ãÂ"); \t \t \t \t int size = (int) tvData.getTextSize(); \t \t Drawable img = getResources(). GetDrawable (R.drawable.circle_white_full_72) .mutate(); \t \t img.setBounds (0, 0, kích thước, kích thước); \t \t tvData.setCompoundDrawables (null, null, img, null); Đây là kết quả http://i.imgur.com/zUEzB.png vì bạn có thể thấy nó dường như không sử dụng hậu duệ và con cháu. – pt123

+0

Tôi đã thêm mã thử nghiệm của mình vào câu hỏi chính – pt123

+1

'metrics.descent - metrics.ascent' Đó chỉ là những gì tôi cần! – amram99

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