Android视图layout_width - 如何以编程方式更改?

82

这是我的视图,我希望以编程方式将layout_width更改为"10dip"。请注意,这不是LinearLayout,而是一个View。

<View 
    android:id="@+id/nutrition_bar_filled" 
    android:background="@drawable/green_rectangle" 
    android:layout_height="30dp"
    android:layout_width="50dp"/>       

我知道LayoutParams。如何使用它将宽度设置为10dip?

4个回答

186

我认为您的问题是要动态更改视图的宽度,而上述方法将完全更改布局属性到新的属性中。因此,我建议首先从视图中获取LayoutParams,然后在LayoutParams中设置宽度,最后将LayoutParams设置到视图中,按照以下步骤执行相同操作。

View view = findViewById(R.id.nutrition_bar_filled);
LayoutParams layoutParams = view.getLayoutParams();
layoutParams.width = newWidth;
view.setLayoutParams(layoutParams);

25
你可以直接执行"view_instance.getLayoutParams().width = newOne;"来改变宽度。 - Tony Wickham
25
要获得类似于match_parent的值,可以使用LayoutParams.MATCH_PARENT - Gene Bo
@snayde 我相信设置视图的LayoutParams的宽度和高度参数会导致重新测量和布局。 - Tony Wickham
@TonyWickham 看了一下 View 类的实现,不太明白它是怎么做到的 :( - sergey.n

13

或者简单说:

view.getLayoutParams().width = 400;
view.requestLayout();

10

试着使用

View view_instance = (View)findViewById(R.id.nutrition_bar_filled);
view_instance.setWidth(10);

使用Layoutparams可以实现此目的,您可以像下面这样设置宽度和高度。

LayoutParams lp = new LayoutParams(10,LayoutParams.wrap_content);
View_instance.setLayoutParams(lp);

你能澄清一下吗?我差不多准备把你标记为正确答案了。我怎么获取view_instance? - Henley
@Hisoka 使用 findViewById(R.id.nutrition_bar_filled) 来获取视图。 - Chris Thompson
这是我尝试的第一件事。看起来非常直观,但是setWidth不是视图的有效函数。View filledBar = rowView.findViewById(R.id.nutrition_bar_filled); filledBar.setWidth(10) <-- 无效。 - Henley
3
方法 setWidth(int) 在类型 View 中未定义。 - Henley
好的,我修改了我的问题。我已经知道了布局参数(Layout params)。我的问题是如何使用布局参数(Layout Params)将我的视图(View)的宽度设置为"10dip"。阅读在线文档,对我来说并不那么明显。 - Henley

4

androidx(core-ktx)包含一个用于更新布局参数的扩展函数,例如:

view.updateLayoutParams<ConstraintLayout.LayoutParams> {
    width = ConstraintLayout.LayoutParams.MATCH_PARENT
    // or wrap_content
    width = ConstraintLayout.LayoutParams.WRAP_CONTENT
    // or size measured in pixels
    width = 200 
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接