2011-07-07 29 views
3

我已經構建了一個ListView,並且我的項目 - 至少部分 - 包含各種(文本)長度的標題。 爲了使用戶能夠儘可能多地閱讀標題,我試圖將我的適配器更改爲自動爲我的文本選擇可行的字體大小。Android:在ListView項目中自動縮放文本

因此,我正在使用TextView的繪畫對象來測量基線字體大小(14dp)中的文本,並嘗試與可用空間進行比較。如果文字太大,我將字體大小減小到12dp(稍後我可能會考慮進一步降低字體大小)。

// Note: vh.filmTitleTextView is my TextView, filmText contains the title I want to display 
filmTitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14); 
float textWidth = vh.filmTitleTextView.getPaint().measureText(filmText); 
if (textWidth > vh.filmTitleTextView.getWidth()) 
    vh.filmTitleTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 12); 

的問題是,在第一次運行,vh.filmTitleTextView.getWidth()總是返回零。我想這是因爲之前沒有渲染布局,而且尺寸還不知道。

我不能只使用ListView的全尺寸,因爲textView的寬度並不相同(儘管它被設置爲layout_width =「fill_parent」) - 它周圍有一些元素。

任何想法?

回答

2

有類似的問題,這是我很長一段時間的禍根 - 這可能會幫助你的:Auto Scale TextView Text to Fit within Bounds

+0

非常感謝,偉大工程! – Patrick

+0

大:)請將答案標爲正確。您也可以閱讀Stack Overflow常見問題解答 - 熟悉它並保持活躍狀態​​是瞭解您正在開發的任何內容的好方法。 –

+0

小的更新:我發現AutoResizeTextView類(如文章中引用的Nathan所引用的)從功能的角度來看工作正常,但在我的情況下,它似乎對我的listview的滾動性能有顯着的影響。我目前正在研究這是爲什麼,並試圖找到改善這種情況的方法。 – Patrick