你如何为ImageView设置LayoutParams()?

Dea*_*ime 71 layout android imageview

我想设置LayoutParams一个,ImageView但似乎无法找到正确的方法来做到这一点.

我只能在API中找到各种文档ViewGroups,但不是ImageView.但ImageView似乎有这个功能.

这段代码不起作用......

myImageView.setLayoutParams(new ImageView.LayoutParams(30,30));
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

Ste*_*ley 164

您需要设置ImageView所在的ViewGroup的LayoutParams.例如,如果您的ImageView在LinearLayout中,那么您创建一个

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)

这是因为它是View的父级需要知道要分配给View的大小.

  • 我很高兴我可以帮忙.如果您的问题得到解决,您能否将此标记为已接受的答案?它是文本左侧的标记. (21认同)
  • 你知道......你说过的是什么.但我已经掌握了这个概念,但却犯了一个大错误.你看我在TableLayout中有我的ImageViews ...所以我使用的是TableLayout.setLayoutParams.但它会崩溃.当我深入思考它时,我需要深入研究TableRow.setLayoutParams以使其最终发挥作用.谢谢你让我的大脑工作.'坐在'中为我触发了......让这些东西变得愚蠢. (2认同)
  • @fuzzybee我认为它是像素的......代码中设置的大多数布局都是像素而不是DP.使用类似`TypedValue.applyDimension(TypedValue.ComplexUnit_DP,30,getResources().getDisplayMetrics())的方法将像素转换为DP (2认同)

小智 18

旧线程,但我现在有同样的问题.如果有人遇到这个,他可能会找到这个答案:

LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)

仅当您将ImageView作为子视图添加到LinearLayout时,此方法才有效.如果将其添加到RelativeLayout,则需要调用:

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(30, 30);
yourImageView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)


Kar*_*ing 11

如果您要更改现有ImageView的布局,您应该能够简单地获取当前的LayoutParams,更改宽度/高度并将其设置回:

android.view.ViewGroup.LayoutParams layoutParams = myImageView.getLayoutParams();
layoutParams.width = 30;
layoutParams.height = 30;
myImageView.setLayoutParams(layoutParams);
Run Code Online (Sandbox Code Playgroud)

我不知道这是不是你的目标,但如果是,这可能是最简单的解决方案.


Cod*_*sed 6

ImageView从View获取setLayoutParams,它使用ViewGroup.LayoutParams.如果你使用它,它会在大多数情况下崩溃,所以你应该使用View.class中的getLayoutParams().这将继承ImageView的父视图,并将始终有效.您可以在此处确认:ImageView扩展视图

假设您将ImageView定义为' image_view ',并将width/height int定义为'thumb_size'

最好的方法是:

ViewGroup.LayoutParams iv_params_b = image_view.getLayoutParams();
iv_params_b.height = thumb_size;
iv_params_b.width = thumb_size;
image_view.setLayoutParams(iv_params_b);
Run Code Online (Sandbox Code Playgroud)