Android,动态改变View大小和位置
动态改变view大小view的LayoutParams的初始值为null,先set后才能get对于直接new出来的view,setLayoutParams后,getLayoutParams才不为null在xml布局中引用view,设置layout_width和layout_height,实质上是setLayoutParams如果new出来的view,还没有加入到布局容器中,view的LayoutP
动态改变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
更多推荐
所有评论(0)