android 在小部件的RemoteView中以编程方式将高度百分比设置为LinearLayout

uqjltbpv  于 2023-02-20  发布在  Android
关注(0)|答案(2)|浏览(111)

我想创建一个小部件,用图表表示某些资产的股票价值增长百分比。我可以创建一个图表概览,每个图表都有一个百分比高度,方法是在容器LinearLayout中放置两个LinearLayout。底部的LinearLayout是图表,顶部的LinearLayout是间隔符,它得到一定的layout_weight。这样我就可以使用百分比来减小另一个容器的大小。(如果间隔符的layout_weight等于0.4,那么图形的高度为60%)。
小部件的当前状态是(我想以后用红色处理负值,但如果我不知道如何按百分比调整图形大小,就不需要继续了):

我选择这种方法是因为我不能在RemoteViews中使用ConstraintLayout,一切看起来都很好,但是当我想基于来自API的数据以编程方式更改spacer的大小时(这样图表的大小才能与股票价值的百分比增长相匹配),我没能做到。据我所知,无法在java中的RemoteView中更改LinearLayoutlayout_weight
然后我想,也许我最后的希望是使用findViewById找到容器(包含所有图表)的高度,但是对于RemoteViews也是不可能的。然后我会看到容器的高度为100%,然后根据该大小设置其他LinearLayout的高度。60%将为0。六倍于我从集装箱里拿出来的高度。但是,恐怕,这也是不可能的。
因此,我实际上不知道如何通过编程找出LinearLayout的高度,或者如何按百分比更改LinearLayout的大小。似乎我总是需要知道小部件中将使用的容器的大小?这有点烦人,因为内容会发生变化,并且需要根据每个资产的每个增益的比率进行不同的渲染。
我是不是错过了某种方法来处理这个问题?我似乎不能找到更多的Android开发人员的文档...干杯!

trnvg8h3

trnvg8h31#

API Level 31(Android 12)中只添加了setViewLayoutHeight()这样的方法,因此,一个选项是将minSdk设置为31,并暂时使用较小的用户群。
或者:

  • 对于复杂的UI,您可以考虑在应用中渲染Bitmap,然后在应用小部件的ImageView中显示BitmapBitmap通过ContentProvider提供)。这很烦人,但它为您提供了最大的灵活性。
  • 另一种可能性是拥有一堆不同的布局资源,在其中编码一系列所需的权重,在RemoteViews中更新时使用所需的权重。如果保持一致的小部件ID,其余代码应该不需要做太多更改。
  • 你的问题标记为java。如果你最终学会了Kotlin,你可以看到Glance是否有更大的灵活性。Glance使用Jetpack Compose创建应用小部件(和Wear OS磁贴)。
crcmnpdw

crcmnpdw2#

直接使用:setViewLayoutHeightDimen(您的布局ID,整数高度尺寸)

相关问题