2011-05-17 78 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,似乎没有其他方法可以做到这一点。

我想现在已经足够好了。