我的主屏幕小部件中有一个ImageView
。在布局文件中,我将高度和宽度设置为wrap_content
。但是根据用户的输入,我必须将其高度和宽度更改为match_parent
。怎么办呢?
RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
现在我尝试在这个setInt()
对象上使用RemoteViews
方法来检查是否可以更改高度和宽度:
rv.setInt(R.id.widgetImageView, "setMinimumHeight", 300);
但这是我在logcat上得到的:
couldn't find any view, using error view
android.widget.ImageView can't use method with RemoteViews: setMinimumHeight(int)
那么如何将其高度和宽度更改为match_parent
?
答案 0 :(得分:1)
使用:
ImageView view = new ImageView();
view.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
LayoutParams
的第一个参数是宽度,第二个是高度。
在这里,我创建了一个新的ImageView进行解释。您应该使用代码中自己的ImageView变量来执行上述操作。我希望这很清楚。
[代码更新]:抱歉,MATCH_PARENT
变量位于LayoutParams
下View
下。我已经更新了代码。
[更新]:上述答案不适用于RemoteViews
,因为RemoteViews
无法使用布局参数。根据此SO Question中给出的答案,无法通过常规方法设置或查找RemoteView的维度。
我找到了这个Android Widget Tutorial,在小部件大小部分下,作者说:
A Widget will take a certain amount of cells on the homescreen. A cell is
usually used to display the icon of one application. As a calculation rule
you should define the size of the widget with the formula:
((Number of columns / rows)* 74) - 2.
These are device independent pixels and the -2 is used to avoid rounding issues.
As of Android 3.1 a Widgets can be flexible in size, e.g. the user can make it
larger or smaller. To enable this for Widgets you can use the
android:resizeMode="horizontal|vertical" attribute in the XML configuration file
for the widget.
由此,我建议您不要直接设置特定的整数大小值,为什么不设置要调整大小的行数和列数?例如,如果您的初始窗口小部件大小为4 Columns and 1 Row
,那么在用户输入上,您可以将其更改为4 Columns and 4 Rows
,从而使其占据整个屏幕(窗口小部件的最大大小为4行和4列)
我知道上面的方法不是你想要的,但这对我来说似乎是唯一的方法。试着看看它是否有用。
答案 1 :(得分:0)
对于那些想知道如何做到这一点的人,我在布局中使用了两个ImageView
。一个高度和宽度设置为wrap_content
,另一个高度和宽度设置为match_parent
。我根据用户的输入调用了setVisibility
来隐藏ImageView
所不需要的RemoteView
。
rv.setInt(R.id.widgetImageView1, "setVisibility", View.GONE);
我们可以通过ImageView
调用极少数RemoteView
种方法。
答案 2 :(得分:0)
您可以做的是为 ImageView 设置填充。
views.setViewPadding(int id, int left, int top, int right, int bottom);
您可以将填充设置为 ImageView,也可以使用一些容器视图将其包裹起来。