2011-09-14 23 views
9

Tôi muốn tạo một trình đọc văn bản, sẽ cắt văn bản và đặt nó trong TextView (đại diện cho các trang của tôi) và cái kia. Chúng được chứa trong một ViewFlipper (đại diện cho toàn bộ văn bản của tôi), cho phép tôi lật trang.Android: Làm cách nào để biết có bao nhiêu văn bản có thể vừa với textView của tôi (trang của tôi)?

Do khuyết điểm, tôi không thể cắt văn bản của mình một cách thông minh. Bây giờ tôi giới hạn mỗi TextView thành một số ký tự, nhưng nó rất không ổn định. Thật vậy một số bức thư chiếm nhiều không gian hơn những người khác .. Chúng tôi không thể sử dụng phương pháp này.

Làm cách nào để biết số lượng văn bản sẽ nhập vào một TextView?

Tôi đã cố gắng tìm kích thước tối đa của Chế độ xem của mình theo cách thủ công. Tôi gọi bằng:

float test = view.getPaint().measureText(myString); 

Nó hoạt động tốt. Khi tôi đặt 480 chữ cái (0 và 1), tôi nhận được 14.400 và văn bản của tôi hoàn toàn nằm trong màn hình. Với:

1 -> 12.0 
0 -> 12.0 
é -> 11.0 
\n -> 13.0 
\r -> 7.0 

tổng điền trang -> 14400

Vấn đề là các ngắt dòng và vận chuyển trở lại đang gây ra vấn đề.

Nếu tôi chỉ có chữ cái hoặc số trong chuỗi của mình, rất tốt: nếu chúng tôi tôn trọng kích thước tối đa 14.400, mọi thứ được hiển thị trên màn hình. Không vấn đề gì!

Do khuyết điểm, nếu ngắt dòng hoặc trả về vận chuyển, nó không hoạt động. Ngay cả khi chúng tôi tôn trọng giới hạn 14400, văn bản ở trên và không được hiển thị đầy đủ.

Điều này là do phương pháp "MeasureText";.." Chỉ trả 13 cho ngắt dòng Nhưng đó là lạ, một ngắt dòng nên chiếm ít nhất 480 để làm cho nó phù hợp

Làm thế nào để các nhà xuất bản sách điện tử (Moon Reader, + Aldiko) cho văn bản được định dạng quá tốt? Mỗi trang có cùng chiều cao, văn bản kết thúc ở cùng một vị trí.

+0

Bạn đã tìm thấy bất kỳ giải pháp? – Arslan

Trả lời

2

Bạn có thể sửa số dòng trong TextView bằng cách thêm android:maxLines="some_integer". Cách khác là:

if (myTextView.getMeasuredWidth() < myTextView.getPaint().measureText(myText)) { 
    myTextView.setHorizontalFadingEdgeEnabled(true); 
    myTextView.setHorizontallyScrolling(true); 
} 

Nhưng điều này sẽ thêm hiệu ứng nhiều mây vào ký tự cuối cùng nếu văn bản quá dài.

+0

Cảm ơn bạn nhưng tôi không thể sử dụng mã của bạn. "GetMeasuredWidth" có vẻ không phù hợp. Cô ấy trả về 0 mỗi lần. Cảm ơn bạn đã "myTextView.getPaint(). MeasureText (myText)" chính xác là tôi cần. Bây giờ tôi chỉ cần một phương pháp để xác định công suất tối đa của Chế độ xem của tôi. "getMeasuredWidth" không trả lại bất cứ điều gì. – 118218

+0

Nó có, nhưng điểm kỳ lạ nhất là mã này luôn hoạt động tốt! – superM

+0

bạn đang cố gắng thực hiện điều này trên onCreate của một hoạt động? – blessenm

0

Trước khi được đo chiều rộng hoặc chiều cao gọi dưới phương pháp:

anyview.measure(0,0); 

mà không gọi phương pháp này cho bạn tất cả tiền lương nhận được 0 value cho heightwidth

+0

Và xem bạn cần chiều cao và chiều rộng phải được tăng cấp từ XML hoặc thông qua mã. –

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