动态改变view大小

设置view宽高需要用到LayoutParams,先说明一下LayoutParams:

View的属性LayoutParams的初始值为null,先set后才能get。
对于直接new出来的view,setLayoutParams后,getLayoutParams才不为null。如果View构造时,本身已经setLayoutParams,可以直接getLayoutParams。基本上原生的控件不自带layoutParams。
对于在xml布局中引用的view,设置layout_width和layout_height,实质上是setLayoutParams。

如果new出来的view,还没有加入到布局容器中,view的LayoutParams类型可以设置为ViewGroup.LayoutParams。view加入到父控件中,此view的LayoutParams类型被转换为父控件.LayoutParams(父控件是一个ViewGroup)
如果view已经加入到某个父控件中,此view的LayoutParams类型为父控件.LayoutParams

情况1:对于引入到布局中的view,已经有了LayoutParams对象,可以直接get出来,然后set宽高

mView = findViewById(R.id.view_a);
ViewGroup.LayoutParams layoutParams = mView.getLayoutParams();
layoutParams.width = 100; //单位px
layoutParams.height = 100;

//setLayoutParams(layoutParams);
如果在dialog或者window中,对view操作不起效,试试重新setLayoutParams(layoutParams);

情况2:对于直接new出来的view,要现new一个LayoutParams对象 

mView = new TextView(this);                                                
mView.setBackgroundColor(0xff33b5e5);                                      
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(100, 100);
mView.setLayoutParams(layoutParams);                                       
mContainer.addView(mView);

动态改变view位置

方法1:只改变view位置(xy原点为view父布局左上角,xy为view左上角)

mView.setX(200); //单位px
mView.setY(200);

方法2:同时改变view位置和大小

View # public void layout(int left, int top, int right, int bottom)

例:
mView.layout(200, 200, 500, 500); //单位px

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐