Android studio 动态布局

目录

以下是Android中常用布局参数类的详细介绍,包括构造方法、常用方法、常用属性以及基于Java的案例:

RelativeLayout.LayoutParams

构造方法
  • RelativeLayout.LayoutParams(int width, int height):创建一个指定宽度和高度的布局参数。
  • RelativeLayout.LayoutParams(ViewGroup.LayoutParams source):从其他 ViewGroup.LayoutParams 复制参数。
  • RelativeLayout.LayoutParams(ViewGroup.MarginLayoutParams source):从 ViewGroup.MarginLayoutParams 复制参数。
  • RelativeLayout.LayoutParams(Context c, AttributeSet attrs):从 XML 布局文件中解析布局参数。
常用方法
  • addRule(int verb):添加一个布局规则。例如,addRule(RelativeLayout.CENTER_IN_PARENT)
  • addRule(int verb, int anchor):添加一个布局规则,并指定锚点。例如,addRule(RelativeLayout.BELOW, viewId)
  • removeRule(int verb):移除一个布局规则。
  • setMargins(int left, int top, int right, int bottom):设置视图的外边距。
常用属性
  • widthheight:分别指定子视图的宽度和高度。
  • rules:一个整型数组,用于存储布局规则。
Java案例
创建 RelativeLayout 视图
java 复制代码
// 创建一个RelativeLayout作为根布局
RelativeLayout relativeLayout = new RelativeLayout(this);

// 创建一个Button作为子视图
Button button = new Button(this);
button.setText("Button"); // 设置按钮文本

// 创建RelativeLayout.LayoutParams布局参数
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
    RelativeLayout.LayoutParams.WRAP_CONTENT, // 宽度包裹内容
    RelativeLayout.LayoutParams.WRAP_CONTENT  // 高度包裹内容
);
params.addRule(RelativeLayout.CENTER_IN_PARENT); // 设置按钮在父布局中居中

// 将按钮添加到RelativeLayout中,并设置布局参数
relativeLayout.addView(button, params);

// 将RelativeLayout设置为当前Activity的内容视图
setContentView(relativeLayout);
修改 RelativeLayout 中的视图
示例:将按钮从居中移动到父布局底部
java 复制代码
// 获取RelativeLayout和按钮
RelativeLayout relativeLayout = findViewById(R.id.relative_layout);
Button button = findViewById(R.id.button);

// 获取按钮的布局参数
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams();

// 修改布局规则:从居中改为底部对齐
params.removeRule(RelativeLayout.CENTER_IN_PARENT); // 移除居中规则
params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); // 添加底部对齐规则

// 应用修改后的布局参数
button.setLayoutParams(params);

LinearLayout.LayoutParams

构造方法
  • LinearLayout.LayoutParams(int width, int height):创建一个指定宽度和高度的布局参数。
  • LinearLayout.LayoutParams(ViewGroup.LayoutParams source):从其他 ViewGroup.LayoutParams 复制参数。
  • LinearLayout.LayoutParams(ViewGroup.MarginLayoutParams source):从 ViewGroup.MarginLayoutParams 复制参数。
  • LinearLayout.LayoutParams(Context c, AttributeSet attrs):从 XML 布局文件中解析布局参数。
  • LinearLayout.LayoutParams(int width, int height, float weight):创建一个指定宽度、高度和权重的布局参数。
常用方法
  • setMargins(int left, int top, int right, int bottom):设置视图的外边距。
常用属性
  • widthheight:分别指定子视图的宽度和高度。
  • weight:指定子视图在父布局中所占的权重。
Java案例
创建 LinearLayout 视图
java 复制代码
// 创建一个LinearLayout作为根布局
LinearLayout linearLayout = new LinearLayout(this);

// 创建一个Button作为子视图
Button button = new Button(this);
button.setText("Button"); // 设置按钮文本

// 创建LinearLayout.LayoutParams布局参数
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
    LinearLayout.LayoutParams.WRAP_CONTENT, // 宽度包裹内容
    LinearLayout.LayoutParams.WRAP_CONTENT, // 高度包裹内容
    1.0f // 权重为1.0
);
linearLayout.setOrientation(LinearLayout.VERTICAL); // 设置LinearLayout为垂直方向

// 将按钮添加到LinearLayout中,并设置布局参数
linearLayout.addView(button, params);

// 将LinearLayout设置为当前Activity的内容视图
setContentView(linearLayout);
修改 LinearLayout 中的视图
示例:改变按钮的权重和外边距
java 复制代码
// 获取LinearLayout和按钮
LinearLayout linearLayout = findViewById(R.id.linear_layout);
Button button = findViewById(R.id.button);

// 获取按钮的布局参数
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) button.getLayoutParams();

// 修改权重
params.weight = 2.0f; // 将权重设置为2.0

// 修改外边距
params.setMargins(10, 20, 10, 20); // 左、上、右、下外边距分别为10、20、10、20

// 应用修改后的布局参数
button.setLayoutParams(params);

FrameLayout.LayoutParams

构造方法
  • FrameLayout.LayoutParams(int width, int height):创建一个指定宽度和高度的布局参数。
  • FrameLayout.LayoutParams(ViewGroup.LayoutParams source):从其他 ViewGroup.LayoutParams 复制参数。
  • FrameLayout.LayoutParams(ViewGroup.MarginLayoutParams source):从 ViewGroup.MarginLayoutParams 复制参数。
  • FrameLayout.LayoutParams(Context c, AttributeSet attrs):从 XML 布局文件中解析布局参数。
  • FrameLayout.LayoutParams(int width, int height, int gravity):创建一个指定宽度、高度和对齐方式的布局参数。
常用方法
  • setMargins(int left, int top, int right, int bottom):设置视图的外边距。
常用属性
  • widthheight:分别指定子视图的宽度和高度。
  • gravity:指定子视图在其父布局中的对齐方式。
Java案例
创建 FrameLayout 视图
java 复制代码
// 创建一个FrameLayout作为根布局
FrameLayout frameLayout = new FrameLayout(this);

// 创建一个Button作为子视图
Button button = new Button(this);
button.setText("Button"); // 设置按钮文本

// 创建FrameLayout.LayoutParams布局参数
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
    FrameLayout.LayoutParams.WRAP_CONTENT, // 宽度包裹内容
    FrameLayout.LayoutParams.WRAP_CONTENT, // 高度包裹内容
    Gravity.CENTER // 设置按钮在父布局中居中
);

// 将按钮添加到FrameLayout中,并设置布局参数
frameLayout.addView(button, params);

// 将FrameLayout设置为当前Activity的内容视图
setContentView(frameLayout);
修改 FrameLayout 中的视图
示例:改变按钮的对齐方式和外边距
java 复制代码
// 获取FrameLayout和按钮
FrameLayout frameLayout = findViewById(R.id.frame_layout);
Button button = findViewById(R.id.button);

// 获取按钮的布局参数
FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) button.getLayoutParams();

// 修改对齐方式:从居中改为顶部对齐
params.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; // 顶部水平居中

// 修改外边距
params.setMargins(0, 50, 0, 0); // 上边距设置为50

// 应用修改后的布局参数
button.setLayoutParams(params);

ConstraintLayout.LayoutParams

构造方法
  • ConstraintLayout.LayoutParams(int width, int height):创建一个指定宽度和高度的布局参数。
  • ConstraintLayout.LayoutParams(ViewGroup.LayoutParams source):从其他 ViewGroup.LayoutParams 复制参数。
  • ConstraintLayout.LayoutParams(Context c, AttributeSet attrs):从 XML 布局文件中解析布局参数。
常用方法
  • setMargins(int left, int top, int right, int bottom):设置视图的外边距。
常用属性
  • layout_constraintTop_toTopOflayout_constraintBottom_toBottomOflayout_constraintLeft_toLeftOflayout_constraintRight_toRightOf 等:用于指定子视图与其他视图或父布局的约束关系。
Java案例
创建 ConstraintLayout 视图
java 复制代码
// 创建一个ConstraintLayout作为根布局
ConstraintLayout constraintLayout = new ConstraintLayout(this);

// 创建一个Button作为子视图
Button button = new Button(this);
button.setText("Button"); // 设置按钮文本

// 创建ConstraintLayout.LayoutParams布局参数
ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(
    ConstraintLayout.LayoutParams.WRAP_CONTENT, // 宽度包裹内容
    ConstraintLayout.LayoutParams.WRAP_CONTENT  // 高度包裹内容
);
params.topToTop = ConstraintLayout.LayoutParams.PARENT_ID; // 按钮顶部与父布局顶部对齐

// 将按钮添加到ConstraintLayout中,并设置布局参数
constraintLayout.addView(button, params);

// 将ConstraintLayout设置为当前Activity的内容视图
setContentView(constraintLayout);
修改 ConstraintLayout 中的视图
示例:改变按钮的约束关系
java 复制代码
// 获取ConstraintLayout和按钮
ConstraintLayout constraintLayout = findViewById(R.id.constraint_layout);
Button button = findViewById(R.id.button);

// 获取按钮的布局参数
ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) button.getLayoutParams();

// 修改约束关系:从顶部对齐改为底部对齐
params.topToTop = ConstraintLayout.LayoutParams.UNSET; // 移除顶部对齐约束
params.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID; // 添加底部对齐约束

// 应用修改后的布局参数
button.setLayoutParams(params);

TableLayout.LayoutParams

构造方法
  • TableLayout.LayoutParams(int width, int height):创建一个指定宽度和高度的布局参数。
  • TableLayout.LayoutParams(ViewGroup.LayoutParams source):从其他 ViewGroup.LayoutParams 复制参数。
  • TableLayout.LayoutParams(Context c, AttributeSet attrs):从 XML 布局文件中解析布局参数。
常用属性
  • widthheight:分别指定子视图的宽度和高度。
Java案例
创建 TableLayout 视图
java 复制代码
// 创建一个TableLayout作为根布局
TableLayout tableLayout = new TableLayout(this);

// 创建一个TableRow作为TableLayout的子视图
TableRow tableRow = new TableRow(this);

// 创建一个Button作为TableRow的子视图
Button button = new Button(this);
button.setText("Button"); // 设置按钮文本

// 创建TableLayout.LayoutParams布局参数
TableLayout.LayoutParams tableLayoutParams = new TableLayout.LayoutParams(
    TableLayout.LayoutParams.WRAP_CONTENT, // 宽度包裹内容
    TableLayout.LayoutParams.WRAP_CONTENT  // 高度包裹内容
);

// 创建TableRow.LayoutParams布局参数
TableRow.LayoutParams tableRowParams = new TableRow.LayoutParams(
    TableRow.LayoutParams.WRAP_CONTENT, // 宽度包裹内容
    TableRow.LayoutParams.WRAP_CONTENT  // 高度包裹内容
);

// 将按钮添加到TableRow中,并设置布局参数
tableRow.addView(button, tableRowParams);

// 将TableRow添加到TableLayout中,并设置布局参数
tableLayout.addView(tableRow, tableLayoutParams);

// 将TableLayout设置为当前Activity的内容视图
setContentView(tableLayout);
修改TableLayout 中的视图
示例:改变按钮在表格中的位置
java 复制代码
// 获取TableLayout和按钮
TableLayout tableLayout = findViewById(R.id.table_layout);
Button button = findViewById(R.id.button);

// 获取按钮的布局参数
TableRow.LayoutParams params = (TableRow.LayoutParams) button.getLayoutParams();

// 修改按钮在表格中的位置:从第一列改为第二列
params.span = 2; // 跨两列

// 应用修改后的布局参数
button.setLayoutParams(params);

AbsoluteLayout.LayoutParams

构造方法
  • AbsoluteLayout.LayoutParams(int width, int height, int x, int y):创建一个指定宽度、高度和位置的布局参数。
  • AbsoluteLayout.LayoutParams(ViewGroup.LayoutParams source):从其他 ViewGroup.LayoutParams 复制参数。
  • AbsoluteLayout.LayoutParams(Context c, AttributeSet attrs):从 XML 布局文件中解析布局参数。
常用属性
  • widthheight:分别指定子视图的宽度和高度。
  • xy:分别指定子视图在其父布局中的水平和垂直位置。
Java案例
创建 AbsoluteLayout 视图
java 复制代码
// 创建一个AbsoluteLayout作为根布局
AbsoluteLayout absoluteLayout = new AbsoluteLayout(this);

// 创建一个Button作为子视图
Button button = new Button(this);
button.setText("Button"); // 设置按钮文本

// 创建AbsoluteLayout.LayoutParams布局参数
AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams(
    AbsoluteLayout.LayoutParams.WRAP_CONTENT, // 宽度包裹内容
    AbsoluteLayout.LayoutParams.WRAP_CONTENT, // 高度包裹内容
    100, // 按钮的x坐标(距离父布局左侧的距离)
    200  // 按钮的y坐标(距离父布局顶部的距离)
);

// 将按钮添加到AbsoluteLayout中,并设置布局参数
absoluteLayout.addView(button, params);

// 将AbsoluteLayout设置为当前Activity的内容视图
setContentView(absoluteLayout);
修改 AbsoluteLayout 中的视图
示例:改变按钮的位置
java 复制代码
// 获取AbsoluteLayout和按钮
AbsoluteLayout absoluteLayout = findViewById(R.id.absolute_layout);
Button button = findViewById(R.id.button);

// 获取按钮的布局参数
AbsoluteLayout.LayoutParams params = (AbsoluteLayout.LayoutParams) button.getLayoutParams();

// 修改按钮的位置:从(100, 200)改为(200, 300)
params.x = 200;
params.y = 300;

// 应用修改后的布局参数
button.setLayoutParams(params);

其他动态修改视图

1. 动态修改视图的大小

示例:改变按钮的宽度和高度
java 复制代码
// 获取按钮
Button button = findViewById(R.id.button);

// 获取按钮的布局参数
ViewGroup.LayoutParams params = button.getLayoutParams();

// 修改按钮的宽度和高度
params.width = 300; // 宽度设置为300
params.height = 100; // 高度设置为100

// 应用修改后的布局参数
button.setLayoutParams(params);

8. 动态修改视图的可见性

示例:隐藏按钮
java 复制代码
// 获取按钮
Button button = findViewById(R.id.button);

// 修改按钮的可见性为隐藏
button.setVisibility(View.GONE); // 完全隐藏,不占用空间
// button.setVisibility(View.INVISIBLE); // 隐藏,但占用空间
// button.setVisibility(View.VISIBLE); // 显示
相关推荐
wbs_scy40 分钟前
Linux C++ 高并发编程:线程池全链路深度解析,从原理到手撕实现
java·开发语言
JAVA面经实录91742 分钟前
Linux 常用命令完整知识体系
java·linux·开发语言·汇编
Full Stack Developme2 小时前
Java LRU 与 LFU 算法及应用
java·开发语言·算法
机智的张尼玛4 小时前
我基于 Kotlin Multiplatform 实现了一套跨平台的弱网离线同步引擎
android·开源·kotlin
程序员老油条4 小时前
WSL2 + Docker Desktop:Windows 下的完美 Java 开发环境
java·windows·docker·wsl2
shushangyun_5 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..5 小时前
Java 默认值设置方式
java·开发语言·后端·springboot
学渣超6 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构
掉鱼的猫6 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·llm·aigc
带刺的坐椅6 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·ai·llm·agent·solon-ai