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


69

这是我的观点,我希望将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?

Answers:


163

我相信您的问题是仅动态更改视图的宽度,而上述方法会将布局属性完全更改为新的宽度,因此我建议先从视图中获取getLayoutParams(),然后在layoutParams上设置width,最后将layoutParams设置为视图,因此,请按照以下步骤进行操作。

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

19
您也可以只执行“ view_instance.getLayoutParams()。width = newOne;”
托尼·威克姆

18
要获得类似match_parent这样的值,它可以起作用:LayoutParams.MATCH_PARENT
Gene Bo

@snayde我相信设置View的LayoutParams的width和height参数会使它重新测量和布局
Tony Wickham

@TonyWickham查看了View类的实现,没有知道它是怎么实现的:(
sergey.n

16

您还可以像这样设置高度和宽度:

viewinstance.setLayoutParams(new LayoutParams(width, height));

13
我认为这是错误的方法,它将丢失已设置的任何其他布局属性,例如layout_gravity
mwk 2014年


8

尝试使用

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?
亨利照

@Hisoka用于findViewById(R.id.nutrition_bar_filled)获取视图
克里斯·汤普森

那是我尝试的第一件事。看起来非常直观,但是setWidth对于视图而言不是有效的函数。查看fillBar = rowView.findViewById(R.id.nutrition_bar_filled); fillBar.setWidth(10)<-无效。
亨利·邱

3
对于视图类型,未定义方法setWidth(int)
Henley Chiu

好的,我提了我的问题。我已经了解布局参数。我的问题是如何使用布局参数将视图的宽度设置为“ 10dip”。在线阅读文档对我而言并不那么明显。
亨利照
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.