我有一個TextView,它顯示更改和運行時間的文本。我想使用View.getLineCount()方法來查看TextView佔用了多少行,並相應地執行不同的功能。問題是我需要確定TextView佔用的行數,需要知道它佔用了多少行。我曾嘗試在兩次調用之間調用View.invalidate(),但似乎沒有解決任何問題。如果可能的話,我想測量行數而不渲染視圖,但如果我必須渲染它,我也會公開這樣做。讓我知道如果這不夠具體,我會盡量做得更具體。謝謝!Android:測量渲染前的視圖大小
5
A
回答
1
這實際上可能是Android中非常複雜的問題。如果您在設置文本的時候需要知道(即在視圖呈現或接近呈現之前),則只有使用StaticLayout纔是真正的選擇。如果你能等待,直到臨近渲染時間,你可以使用一個viewTreeObserver:
yourTextView.getViewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout(){
yourTextView.getLineCount();
}
}
onGlobalLayout可以多次調用,有時(無論何種原因)我發現,意見沒有實際佈局還,所以你應該做一些日誌記錄,看看你是否能找到一種方法來確保你得到的結果實際上是有意義的(即行計數> 0)。
StaticLayouts是一個更復雜的替代方案,它應該能夠爲您提供視圖大小和行數。他們可能需要一些調整,以獲得正常工作,並確保您使用視圖中的油漆你試圖測量:
yourTextView.setText(newText);
//the last boolean should be true if you're using padding on your view
StaticLayout measure = new StaticLayout(yourTextView.getText(), yourTextView.getPaint(),
maxAvailableWidthForYourTextView, Layout.Alignment.ALIGN_NORMAL, 1.0f, 1.0f, false)
int numberOfLines = measure.getLineCount();
如果你願意(或已經)的子類的TextView,你可以覆蓋onSizeChanged或onMeasure並嘗試獲取那裏的行數。同樣,與視圖樹觀察者一樣,有時可以在實際測量視圖之前調用這些視圖,因此您可能需要檢查以確保您在這些方法中獲得的任何值都有意義。
相關問題
- 1. 在渲染之前測量視圖
- 2. Android圖形渲染質量測試
- 3. 在渲染前測量文本長度
- 4. 如何測量/計算文檔需要渲染的大小?
- 5. 在不渲染的情況下測量SVG文本大小
- 6. 渲染視圖
- 7. 計算視圖中3D對象的渲染大小
- 8. 重新渲染調整大小的backbone.js視圖?
- 9. 渲染圖像與大小無關嗎?
- 10. Angular4,渲染視圖前重定向?
- 11. 修改視圖渲染路徑之前
- 12. RSPEC測試控制器渲染視圖?
- 13. 如何測量視圖的渲染時間?
- 14. 如何測量綁定/渲染視圖或指令的時間?
- 15. 視圖渲染4.2
- 16. Spine.js渲染視圖
- 17. ZF2視圖渲染
- 18. 渲染Jbuilder視圖
- 19. 渲染在視圖
- 20. 雙渲染視圖
- 21. 如何找出WPF中視覺的最小渲染大小?
- 22. 用於太字節大小數據的大容量渲染和可視化庫
- 23. Android-圖像渲染
- 24. 在渲染局部視圖後阻止主視圖渲染
- 25. 測量渲染時間
- 26. 在渲染之前用ABCPdf調整頁面大小(pdf中的巨大圖像)
- 27. Javascript - 大量渲染對象
- 28. Zend Framework視圖渲染需要大量內存
- 29. mvc3渲染iframe的視圖
- 30. Backbone.js的渲染視圖