我想创建一个小部件,用图表表示某些资产的股票价值增长百分比。我可以创建一个图表概览,每个图表都有一个百分比高度,方法是在容器LinearLayout
中放置两个LinearLayout
。底部的LinearLayout
是图表,顶部的LinearLayout
是间隔符,它得到一定的layout_weight
。这样我就可以使用百分比来减小另一个容器的大小。(如果间隔符的layout_weight
等于0.4
,那么图形的高度为60%)。
小部件的当前状态是(我想以后用红色处理负值,但如果我不知道如何按百分比调整图形大小,就不需要继续了):
我选择这种方法是因为我不能在RemoteViews
中使用ConstraintLayout
,一切看起来都很好,但是当我想基于来自API的数据以编程方式更改spacer的大小时(这样图表的大小才能与股票价值的百分比增长相匹配),我没能做到。据我所知,无法在java中的RemoteView
中更改LinearLayout
的layout_weight
。
然后我想,也许我最后的希望是使用findViewById
找到容器(包含所有图表)的高度,但是对于RemoteViews
也是不可能的。然后我会看到容器的高度为100%
,然后根据该大小设置其他LinearLayout
的高度。60%将为0。六倍于我从集装箱里拿出来的高度。但是,恐怕,这也是不可能的。
因此,我实际上不知道如何通过编程找出LinearLayout
的高度,或者如何按百分比更改LinearLayout
的大小。似乎我总是需要知道小部件中将使用的容器的大小?这有点烦人,因为内容会发生变化,并且需要根据每个资产的每个增益的比率进行不同的渲染。
我是不是错过了某种方法来处理这个问题?我似乎不能找到更多的Android开发人员的文档...干杯!
2条答案
按热度按时间trnvg8h31#
API Level 31(Android 12)中只添加了
setViewLayoutHeight()
这样的方法,因此,一个选项是将minSdk
设置为31,并暂时使用较小的用户群。或者:
Bitmap
,然后在应用小部件的ImageView
中显示Bitmap
(Bitmap
通过ContentProvider
提供)。这很烦人,但它为您提供了最大的灵活性。RemoteViews
中更新时使用所需的权重。如果保持一致的小部件ID,其余代码应该不需要做太多更改。crcmnpdw2#
直接使用:setViewLayoutHeightDimen(您的布局ID,整数高度尺寸)