我来通过实例介绍下如何代码中创建view,以及代码中更改view的布局属性。
首先代码中创建一个view:
第一步,new一个view出来
第二步,new一个布局属性出来
第三步,将布局属性绑定到view上
第四步,把view添加到已有的布局中
代码中更改view的布局属性:
第一步:获取要更改的view的布局属性
第二步:修改view的布局属性
接下来我举一个例子:一开始有一个相对布局,相对布局下有一个按钮。点击按钮就会创建一个TextView,新建的TextView处于按钮下方,并设置点击事件,点击TextView后,按钮与TextView位置反转。
具体看如下代码:
<RelativeLayout
android:id="@+id/RL"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="403dp"
android:layout_height="wrap_content"
android:text="我是按钮"
android:layout_gravity="center_horizontal" />
</RelativeLayout>
java代码:
public class MainActivity extends Activity {
Button b;
RelativeLayout RL;
TextView tv;
int id=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = findViewById(R.id.button);
RL = findViewById(R.id.RL);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tv = new TextView(MainActivity.this);//new一个TextView
final RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.WRAP_CONTENT);//new一个Relativelayout,宽度填充屏幕,高度适配内容
layoutParams.addRule(RelativeLayout.BELOW,R.id.button);//设置布局属性为在按钮的下方
layoutParams.topMargin = 10;//设置布局属性:view的上边的外部留出10px的距离。(注意这里不是dp)
tv.setLayoutParams(layoutParams);//将设置好的布局属性添加到新建的TextView中
RL.addView(tv);
tv.setBackgroundColor(Color.RED);//设置纯红色背景
tv.setText("我是新建的TextView");
id++;
tv.setId(id);//设置view的id,使用这个方法设置的id不能与现存的所有的view的id重合,且也不能设置为0,这里设置以从1开始累加的方法设置id虽然不出错,但会有重合的风险,具体解决方案请看这篇帖子:https://blog.csdn.net/s13383754499/article/details/81383466
//点击新建的TextView,按钮将会与TextView位置反转
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
layoutParams.removeRule(RelativeLayout.BELOW);//移除TextView处于button下方的属性
RelativeLayout.LayoutParams b_layoutparams = (RelativeLayout.LayoutParams) b.getLayoutParams();//获取按钮的布局属性
b_layoutparams.addRule(RelativeLayout.BELOW,tv.getId());//设置按钮处于TextView的下方
b.setLayoutParams(b_layoutparams);//将布局属性重新赋予给button,实际上这行代码也可不打,因为前面定义b_layoutparams时已经b_layoutparams和b绑定在一起了
}
});
}
});
}
}
实现效果: