Tôi có chế độ xem hiển thị văn bản và hình ảnh trong cột, trong cửa sổ cuộn theo chiều ngang. Nó reflows và do đó (ít nhất là có khả năng) thay đổi kích thước chính nó như là nội dung của nó thay đổi; nó cũng reflows và thay đổi kích thước (duy trì một khu vực gần như không đổi) khi bàn phím mềm đến và đi và chiều cao xem thay đổi.requestLayout() không có tác dụng khi được gọi từ onSizeChanged()?
gì tôi thấy được rằng gọi requestLayout() công trình (theo nghĩa là nó kích hoạt một cuộc gọi đến onMeasure() tình trạng quá tải của tôi) hầu hết thời gian ... nhưng không khi gọi từ handler onSizeChanged() tôi.
tôi đã có thể làm việc này bằng cách post() ing một Runnable mà gọi requestLayout()
và sau đó post()
ed khác Runnable
đó gọi là mã của tôi mà cần phải chạy sau khi onMeasure()
... nhưng điều này có vẻ hơi mỏng manh (tôi không muốn thêm một sự chậm trễ, nhưng tôi muốn chắc chắn rằng Runnable
thứ hai của tôi thực hiện sau khi async onMeasure()
) và, có lẽ bởi vì nó làm cho rất nhiều đi qua vòng lặp sự kiện, màn hình nhấp nháy quá nhiều.
Có cách nào - trong một số onSizeChanged()
- để buộc onMeasure()
(và, có thể, một onSizeChanged()
) khác sẽ xảy ra trước onDraw() tiếp theo?
Thay vì gọi 'requestLayout()' lần thứ hai (và nó không hoạt động từ 'onSizeChanged()' vì gọi lại này là một phần của quy trình bố trí) tại sao bạn không tính toán kích thước chính xác 'onMeasure()'? –
Tôi làm, và nó hoạt động. Nhưng khi chiều cao thay đổi, tôi reflow - mà thay đổi chiều rộng - và do đó cần phải kích hoạt một cuộc gọi đến 'onMeasure()'. –
Câu hỏi của bạn thực sự đã cho tôi câu trả lời cho một vấn đề tôi vừa có, cảm ơn :) Giải pháp View.post của bạn hoạt động mà không có bất kỳ tác dụng phụ nào đối với tôi. Cảm ơn! –