在 Widget 的 RemoteViews 中以编程方式将百分比高度设置为 LinearLayout

问题描述 投票:0回答:1

我想创建一个带有图表的小部件,代表某些资产的股票价值的百分比增长。通过将两个

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 开发者文档中找到更多信息……干杯!

java android android-studio widget remoteview
1个回答
1
投票

影响此类事物的能力仅在 API 级别 31(Android 12)中添加,使用

setViewLayoutHeight()
等方法。因此,一种选择是将您的
minSdk
设置为 31 并在较小的用户群中生活一段时间。

或:

  • 对于复杂的 UI,您可以考虑在应用程序中呈现一个

    Bitmap
    ,然后在应用程序小部件的
    Bitmap
    中显示该
    ImageView
    (通过
    Bitmap
    提供
    ContentProvider
    )。这很烦人,但它给了你最大的灵活性。

  • 另一种可能性是拥有一堆不同的布局资源,您可以在其中编码一系列所需的权重,然后在

    RemoteViews
    中使用所需的权重进行更新。如果你保持一致的小部件 ID,你的代码的其余部分应该不需要改变太多。

  • 您将问题标记为 。如果你最终学习了 Kotlin,你可以看看 Glance 是否有更多的灵活性。 Glance 使用 Jetpack Compose 创建应用程序小部件(和 Wear OS 磁贴)。

© www.soinside.com 2019 - 2024. All rights reserved.