2011-05-17 80 views
4

看起來是一個簡單的要求是一個相當痛苦的過程。我需要一個AppWidget來顯示一些(通常是多行)文本 - 文本的大小會有所不同,並且可能比視圖允許的時間更長,因此需要在這種情況下進行橢圓化。該視圖還將支持Android v3.1中的可調整大小的小部件,該小部件再次要求小部件能夠正確動態支持不同大小的內容。很簡單,你會想?如果這是一個單行的TextView,我認爲這將是...AppWidget中的橢圓化多行文本?

因此,最初我創建了一個單獨的TextView,設置屬性來橢圓化它,當文本不適合,並遇到the bug這意味着這不起作用 - 文字只包含兩行。

然後我用多行抓住an open source custom view that ellipsizes correctly,它工作正常,但只在一個活動。我忘記了AppWidget限制了視圖可以進入一個小部件,所以這也失敗了(「Class不允許被誇大」)。我看不到使用此自定義視圖的方法。

所以...我能想到的最好的解決方案是向窗口小部件添加一系列單行TextView,並遍歷子串,直到找到適合每一行的長度,然後再轉到下一個。即手動呈現/測量/呈現文本。這種方法有許多缺點。

是否有更好的方法將多行橢圓化文本轉換爲AppWidget?

回答

2

說實話,我認爲你應該退一步,重新思考你想做的事情。能夠調整窗口小部件的大小實際上是用於新的可調整大小的容器,其中存在明顯可變的數據量以及用於小部件明確表示應該如何在容器內顯示的方式。如果你沒有使用這些,那麼如果用戶調整顯示大小,那麼構建一個可以調整以提供有用信息的佈局將會非常棘手。

舊的方法,人們會採取 - 應用程序小部件可用不同的單元大小,每個不同的佈局 - 可能仍然適用於沒有使用新的堆棧或列表UI的應用程序小部件。

+0

對於Honeycomb而言,您建議的方法很好,但應用程序可以在其他設備上運行。我認爲很明顯,這裏存在一個錯誤 - 它在某些場景中省略,但不在其他場景中。我最終可能會使用透明度將最後一行淡入到背景中 - 這很醜陋,但是鑑於平臺限制,這是一個明智的解決方案。 – 2011-06-23 08:10:23

+0

我不確定你的意思。我建議的方法是不要使用Android 3.1中引入的可調整大小的小部件功能。 – hackbod 2011-06-23 13:31:46

+0

用戶沒有調整大小 - 小部件顯示大小不同的文本。小部件是固定大小的,內容各不相同,所以必須有某種方式來增加彈性來處理它,而不是僅僅把一個字減半。這是一個非常遺憾的框架實現不能按預期工作。 – 2011-06-24 12:28:52

0

我一直在研究這個確切的問題,我的解決方案是使部件固定大小,並在垂直LinearLayout中使用10個TextViews。沒有實際的ListView,似乎沒有其他方法可以做到這一點。

我想現在已經足夠好了。