Android 代码中创建view,以及代码中更改view的布局属性

我来通过实例介绍下如何代码中创建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绑定在一起了
                    }
                });
            }
        });

    }

}

实现效果:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值