android中用java方法编写xml布局

本文介绍了一个简单的Android应用示例,演示了如何通过代码动态创建界面元素,并实现按钮点击改变自身宽度的功能。该应用使用了RelativeLayout进行布局,并对Button和EditText控件进行了自定义布局设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.demo2;

import android.app.Activity;
import android.content.res.Resources;
import android.graphics.Color;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;


public class SecondActivity extends Activity {
    private boolean clicked = false;
    private Button myButton;
    private EditText myEditText;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    //定义两个控件,button和edittext
    myButton = new Button(this);
    myButton.setText("Press me");

    myEditText = new EditText(this);
    myEditText.setHint("See me");

    //为空间设置ID
    myButton.setId(1);
    myEditText.setId(2);

    //定义好父容器并设置相关属性
    RelativeLayout myLayout = new RelativeLayout(this);
    myLayout.setBackgroundColor(Color.BLUE);

    //设置Button的布局参数
    RelativeLayout.LayoutParams buttonParams =
            new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);

    buttonParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    buttonParams.addRule(RelativeLayout.CENTER_VERTICAL);

    //设置EditText的布局参数
    RelativeLayout.LayoutParams textParams =
            new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);

    textParams.addRule(RelativeLayout.ABOVE, myButton.getId());
    textParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    textParams.setMargins(0, 0, 0, 80);//这里的80是px

    //设置EditText的宽度为指定大小宽度,要相应的dp转化为px
    Resources r = getResources();
    int px = (int) TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP, 200, r.getDisplayMetrics());

    myEditText.setWidth(px);
    //将布局添加到父容器中
    myLayout.addView(myButton, buttonParams);
    myLayout.addView(myEditText, textParams);

    //设置显示父容器
    setContentView(myLayout);

    //为Button设置点击事件,点击使其变宽
    final int wrapWidth = myButton.getLayoutParams().width;
    myButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //点击Button之后使其宽度变宽,再次点击恢复之前的wrap_content状态,可以配合属性动画使其变化更加自然
            if (!clicked) {
                myButton.getLayoutParams().width = 800;
            } else {
                myButton.getLayoutParams().width = wrapWidth;
            }
            clicked = !clicked;
            myButton.requestLayout();
        }
    });
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值