18

我已经设置了我的 ImageView,如下所示:

    <ImageView android:id="@+id/dl_image"
               android:layout_width="60dp"
               android:background="@drawable/pictureframe"
               android:layout_height="wrap_content"
               android:layout_marginRight="10dp"
               android:layout_alignParentLeft="true"
               android:layout_centerVertical="true"
               android:adjustViewBounds="true"
               android:scaleType="fitCenter"/>

请注意,layout_width 固定为 60dp。根据我在网上获得的内容,我想将此宽度调整为 90dp 或 120dp(同时保持图像的纵横比)。

我尝试使用 setLayoutParams,但传递 LayoutParams(120, LayoutParams.WRAP_CONTENT) 会引发异常。它似乎不喜欢它。

如果可能的话,我会尽量避免为更大尺寸制作另一个 ImageView。

4

2 回答 2

43

如果您正在使用现有视图,那么LayoutParams从头开始创建一组新视图可能需要大量工作。相反 - 您可以获取视图的现有 LayoutParams,编辑它们,然后将它们应用到视图以更新其 LayoutParams 使用setLayoutParams()

ImageView imageView = findViewById(R.id.dl_image);
LayoutParams params = (LayoutParams) imageView.getLayoutParams();
params.width = 120;
// existing height is ok as is, no need to edit it
imageView.setLayoutParams(params);

确保导入正确类型的LayoutParams. 对于这种情况,正如您评论的那样,您可以只使用LayoutParamsa ViewGroup。如果您要设置特定于某种视图类型的参数(例如RelativeLayouts 中的对齐),则必须导入该LayoutParams类型视图的 。

于 2011-12-09T23:42:18.000 回答
7

你可以做这一切

ImageView imageView = findViewById(R.id.dl_image);
imageView.getLayoutParams().width = 120;
于 2014-11-30T20:50:01.437 回答