在 appwidget 中调整自定义视图大小的问题,无法确定 android 上的实际大小 appwidget,尤其是在平板电脑上

Posted

技术标签:

【中文标题】在 appwidget 中调整自定义视图大小的问题,无法确定 android 上的实际大小 appwidget,尤其是在平板电脑上【英文标题】:Issue with resizing custom view in appwidget, can't determine real size appwidget on android, especially on tablets 【发布时间】:2012-11-16 05:56:39 【问题描述】:

我正在设计一个 AppWidget,我遇到了这样的问题:我在 xml 中定义

android:minWidth ="296dp"
android:minHeight="146dp"

这意味着我的小部件大小为 4x2 单元格。 在我的程序代码中,我通过在画布上绘制文本和图形来创建自定义视图。为了正确缩放我的自定义视图,我必须知道我的 appwidget 在主屏幕上的位置的边界尺寸。我找不到任何有用的信息来确定主屏幕上的实际 appwidget 大小(所有资源都告诉你 - “你不能!” - 真的如此吗?)所以我使用 android:minWidth 估计了我的 appwidget 大小和android:minHeight="146dp".

问题是我无法在我用于测试的所有设备上正确显示我的小部件,尤其是 它与平板电脑有关。 我已经阅读了https://developer.android.com/guide/practices/ui_guidelines/widget_design.html 和其他官方文档,但我无法得出正确的结论。

1 - 我找到了两个公式来确定一个单元格的大小:

1)minWidth or minHeight = 70 * n - 30       and
2)minWidth or minHeight = 74 * n - 2

我使用了第二个,发现它非常适合普通手机(不适用于三星 Galaxy Tab),但官方建议使用第一个。如果我在手机上使用第一个,它也可以工作,但我有一个较小的小部件组件(大小小部件组件 - 我在画布上绘制的文本、矩形等),因此 appwidget 外观 比第二种情况更糟。

在平板电脑的情况下,我的自定义视图的右侧/左侧有一个空白区域,并且考虑到我的小部件布局(我有自定义小部件和两个按钮),它看起来很糟糕。我认为平板电脑上出现空白是因为 appwidget 的实际宽度和估计宽度不匹配。

如何计算在平板电脑上看起来合适的尺寸小部件?

2 - 我无法使用 9-patch 资源,因为我以编程方式创建视图。我试过在布局小部件中使用 android:scaleType

<ImageView
        android:id="@+id/custom_view"
        android:layout_
        android:layout_
        android:adjustViewBounds="true"
        android:scaleType="fitXY"
        android:clickable="true"
        android:contentDescription="@string/image_description" />

但是,例如,在 Motorola Xoom 中,我的 appwidget 在拉伸自定义视图后的外观很糟糕。

3 - 我发现 Android 设备可以自行调整小部件的大小,但我无法安静地理解这种调整大小的逻辑。

毕竟,在我的案例中,如何为手机和平板电脑设计 appwidget 大小? 非常感谢您的帮助。

【问题讨论】:

Alex,我认为您应该考虑将您的问题分成更小、更集中的问题。这样你就可以得到更多的关注这个问题 主要问题是:如何确定每个设备上小部件单元格的实际大小... 【参考方案1】:

我认为这是不可能的 - 我的应用小部件也有同样的问题。 相反,您可以创建不同版本的应用小部件(即 1x4、2x3 等),但我知道这不是您真正想要的。 在应用程序小部件中完成的缩放,例如 TextView 内的文本(即使使用 sp)似乎超出了我们在 appwidgets 中的控制范围。

【讨论】:

以上是关于在 appwidget 中调整自定义视图大小的问题,无法确定 android 上的实际大小 appwidget,尤其是在平板电脑上的主要内容,如果未能解决你的问题,请参考以下文章

如何将自定义 ListAdapter 设置为 appwidget 中的列表视图?

在自定义容器视图中旋转时 AutoLayout 不会调整视图大小?

在自定义容器控制器中旋转后视图未调整大小

使用窗口调整自定义视图的大小

Swift - 在标签中动态调整大小后动态调整视图大小

如何在绘制之前获取调整大小的自定义视图的宽度和高度