我想创建一个带有图表的小部件,代表某些资产的股票价值的百分比增长。通过将两个
LinearLayout
放入一个容器 LinearLayout
中,我能够创建图表的概览,每个图表都有一个百分比高度。底部 LinearLayout
是图形,顶部 LinearLayout
是获得特定 layout_weight
的间隔符。这样我就可以使用百分比减小另一个容器的大小。 (如果垫片的 layout_weight
为 0.4
,则图形为 60% 高)。
之所以选择这种方式,是因为我不能在
ConstraintLayout
中使用RemoteViews
。一切似乎都运行良好,但是当我想根据来自 api 的数据以编程方式更改间隔的大小时(因此图表的大小真正匹配股票价值的百分比增长),我无法做到。据我所知,没有办法在java中的layout_weight
中更改LinearLayout
的RemoteView
。
然后我想也许我最后的希望是通过使用
findViewById
找到包含所有图形的容器-它的高度,但这对于RemoteViews
也是不可能的。然后我会看到容器的高度为100%
,然后根据该大小设置其他LinearLayout
的高度。 60% 是我从容器中获取的高度的 0.6 倍。但恐怕这也是不可能的。
所以我实际上不知道如何以编程方式找出
LinearLayout
的高度或如何按百分比更改 LinearLayout
的大小。似乎我总是需要知道将在小部件中使用的容器的大小?这有点烦人,因为内容各不相同,需要根据每种资产的每种收益比率进行不同的渲染。
我是否缺少某种方法来解决这个问题?我似乎无法在 Android 开发者文档中找到更多信息……干杯!
影响此类事物的能力仅在 API 级别 31(Android 12)中添加,使用
setViewLayoutHeight()
等方法。因此,一种选择是将您的 minSdk
设置为 31 并在较小的用户群中生活一段时间。
或:
对于复杂的 UI,您可以考虑在应用程序中呈现一个
Bitmap
,然后在应用程序小部件的 Bitmap
中显示该 ImageView
(通过 Bitmap
提供 ContentProvider
)。这很烦人,但它给了你最大的灵活性。
另一种可能性是拥有一堆不同的布局资源,您可以在其中编码一系列所需的权重,然后在
RemoteViews
中使用所需的权重进行更新。如果你保持一致的小部件 ID,你的代码的其余部分应该不需要改变太多。
您将问题标记为 java。如果你最终学习了 Kotlin,你可以看看 Glance 是否有更多的灵活性。 Glance 使用 Jetpack Compose 创建应用程序小部件(和 Wear OS 磁贴)。