【Android】常用参数实践 用户界面UI 布局文件XML

本文将系统总结 Android XML 布局的通用参数和常用布局类型的专属规则


一、通用布局参数

这些参数适用于所有 View 和 ViewGroup,是布局设计的基石。

1. 尺寸控制

  • android:layout_width 与 android:layout_height
    定义视图的宽度和高度,可选值:

    • match_parent:填满父容器

    • wrap_content:自适应内容大小

    • 固定尺寸(如 100dp

<TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content" />

2. 边距与内边距

  • android:layout_margin
    设置视图外部的边距(四个方向统一值)

  • android:layout_marginLeft/Top/Right/Bottom
    分方向设置外边距

  • android:padding
    控制视图内部内容与边界的距离

<Buttonandroid:layout_margin="8dp"android:paddingLeft="16dp" />

3. 对齐方式

  • android:layout_gravity
    控制视图在父容器中的对齐方式(如 centerright|bottom

  • android:gravity
    控制视图内部内容的对齐方式(常用于 TextView

<TextViewandroid:gravity="center_vertical|right" />

二、常用布局类型及核心参数

1. LinearLayout(线性布局)

特点:按水平或垂直方向线性排列子视图

  • 方向控制
    android:orientation="horizontal" 或 "vertical"

  • 权重分配
    android:layout_weight:按比例分配剩余空间(需将对应宽/高设为 0dp

<LinearLayoutandroid:orientation="horizontal"><Buttonandroid:layout_width="0dp"android:layout_weight="1"android:text="按钮1" /><Buttonandroid:layout_width="0dp"android:layout_weight="2"android:text="按钮2" />
</LinearLayout>

2. RelativeLayout(相对布局)

特点:通过相对关系定位子视图

  • 相对于父容器
    android:layout_alignParentTop="true"
    android:layout_centerInParent="true"

  • 相对于其他视图
    android:layout_toRightOf="@id/view_id"
    android:layout_below="@id/view_id"

<Buttonandroid:id="@+id/btn_anchor"android:layout_centerHorizontal="true" /><Buttonandroid:layout_below="@id/btn_anchor"android:layout_alignParentRight="true" />

3. ConstraintLayout(约束布局)

特点:通过约束关系实现复杂布局(官方推荐)

  • 基础约束

    app:layout_constraintStart_toEndOf="@id/view_id"  
    app:layout_constraintTop_toBottomOf="parent"
  • 居中与偏移

    app:layout_constraintHorizontal_bias="0.3"  
    app:layout_constraintVertical_bias="0.7"
  • 链条布局

    app:layout_constraintHorizontal_chainStyle="packed"
<Buttonapp:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.25" />

4. FrameLayout(帧布局)

特点:层叠显示子视图

  • 层级控制
    android:layout_gravity="center|top"
    通过代码动态控制显示层级

<ImageViewandroid:layout_gravity="center" />
<TextViewandroid:layout_gravity="bottom|right" />

5. GridLayout(网格布局)

特点:按行列网格排列

  • 行列控制

    android:layout_row="1"  
    android:layout_column="2"  
    android:layout_rowSpan="2"
<Buttonandroid:layout_row="0"android:layout_column="0"android:layout_columnSpan="2" />

三、最佳实践与注意事项

1. 性能优化技巧

  • 减少嵌套层级
    优先使用 ConstraintLayout 替代多层嵌套的 LinearLayout

  • 复用布局组件
    使用 <include> 标签复用公共布局

  • 使用 merge 标签
    避免冗余的 ViewGroup 嵌套

2. 屏幕适配方案

  • 单位选择

    • 尺寸使用 dp

    • 文字使用 sp

    • 使用 percent 库实现百分比布局

  • 多套布局文件
    通过 res/layout-sw600dp 等目录适配不同屏幕

3. 调试工具推荐

  • Layout Inspector
    实时查看布局层次结构

  • Profile GPU Rendering
    分析布局渲染性能

  • Lint 检查
    自动检测布局文件中的潜在问题


四、总结

        建议从 ConstraintLayout 入手,结合其他布局类型的特点,灵活应对不同场景的需求。随着 Compose 的兴起,虽然 XML 布局逐渐让位,但在维护现有项目时,这些知识仍然是 Android 开发者的必备技能。


延伸阅读:官方文档《使用 ConstraintLayout 构建自适应界面》

希望本文能帮助你更好地理解 Android 布局设计,欢迎在评论区分享你的布局实战经验!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/901842.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决 VSCode 中 NVM 配置后无法识别 Node 和 NPM 的问题

在开发中&#xff0c;我们经常需要使用 Node.js 和 NPM 来管理 JavaScript 项目依赖&#xff0c;而 NVM&#xff08;Node Version Manager&#xff09;是开发者在本地环境中管理多个 Node.js 版本的得力工具。不过&#xff0c;有时候在 VSCode 中配置完 NVM 后&#xff0c;可能…

BGP分解实验·23——BGP选路原则之路由器标识

在选路原则需要用到Router-ID做选路决策时&#xff0c;其对等体Router-ID较小的路由将被优选&#xff1b;其中&#xff0c;当路由被反射时&#xff0c;包含起源器ID属性时&#xff0c;该属性将代替router-id做比较。 实验拓扑如下&#xff1a; 实验通过调整路由器R1和R2的rout…

Linux: 线程同步

目录 一 前言 二 线程饥饿 三 线程同步 四 条件变量 1. cond &#xff08; condition&#xff09; 2. pthread_cond_wait() &#xff1a; 3. pthread_cond_signal() 五 条件变量的使用 一 前言 在上篇文章Linux : 多线程互斥-CSDN博客我们讲解了线程互斥的概念&#xff…

MyBatisPlus-QueryWrapper的exists方法拼接SQL中的EXISTS子句

在 MyBatis-Plus 中,QueryWrapper 的 exists 方法用于拼接 SQL 中的 EXISTS 子句,通常用于构 建子查询条件。以下是具体用法和示例: ​​1. 基本语法​​ // 判断是否存在符合条件的记录 queryWrapper.exists(String existsSql); queryWrapper.notExists(String existsSq…

[数据结构]哈希表

目录 1、哈希表 1.1、概念 1.2、冲突 2、哈希函数设计 3、负载因子调节 4、闭散列 5、开散列/哈希桶&#xff08;重点掌握&#xff09; 6、实现哈希桶 6.1、put方法 6.2、HashMap的扩容机制 6.3、get方法 7、HashMap 8、HashSet 8.1、哈希表性能分析 9、hashcod…

VS-Code创建Vue3项目

1 创建工程文件 创建一个做工程项目的文件夹 如&#xff1a;h5vue 2 cmd 进入文件 h5vue 3 输入如下命令 npm create vuelatest 也可以输入 npm create vitelatest 4 输入项目名称 项目名称&#xff1a;自已输入 回车 可以按键盘 a (全选) 回车&#xff1a; Playwright…

linux休眠唤醒流程

1、框架 2、休眠流程 应用层通过echo mem > /sys/power/state写入休眠状态&#xff0c;给一张大概流程图 这个操作对应在kernel/power/main.c的state这个attr的store操作 static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr, …

Mysql--基础知识点--93--两阶段提交

1 两阶段提交 以update语句的具体执行过程为例&#xff1a; 具体更新一条记录 UPDATE t_user SET name ‘xiaolin’ WHERE id 1;的流程如下&#xff1a; 1.执行器负责具体执行&#xff0c;会调用存储引擎的接口&#xff0c;通过主键索引树搜索获取 id 1 这一行记录&#…

Windows 环境下 Apache 配置 WebSocket 支持

目录 前言1. 基本知识2. 实战前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn 原先写过apache的http配置:Apache httpd-vhosts.conf 配置详解(附Demo) 1. 基本知识 🔁 WebSocket 是 HTTP 的升级协议 客户…

UMAEA论文阅读

Preliminaries MMKG为一个五元组G{E, R, A, V, T}&#xff0c;其中E、R、A和V分别表示实体集、关系集、属性集和图像集。 T⊆ERE是关系三元组集。 给定两个MMKG G1 {E1, R1, A1, V1, T1} 和 G2 {E2, R2, A2, V2, T2}&#xff0c; MMEA旨在识别每个实体对&#xff08;e1…

AIGC-十款知识付费类智能体完整指令直接用(DeepSeek,豆包,千问,Kimi,GPT)

Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列AIGC(GPT、DeepSeek、豆包、千问、Kimi)👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资…

Qt界面卡住变慢的解决方法

本质原因: 当Qt界面出现卡顿或无响应时&#xff0c;通常是因为主线程&#xff08;GUI线程&#xff09;被耗时操作阻塞。 完全忘了。。。 Qt Creater解决方法 1. 定位耗时操作 目标&#xff1a;找到阻塞主线程的代码段。 方法&#xff1a; 使用QElapsedTimer测量代码执行时间…

【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini,Spring Boot整合实战!| 附源码

【LangChain4j快速入门】5分钟用Java玩转GPT-4o-mini&#xff0c;Spring Boot整合实战&#xff01; 前言&#xff1a;当Java遇上大模型 在AI浪潮席卷全球的今天&#xff0c;Java开发者如何快速拥抱大语言模型&#xff1f;LangChain4j作为专为Java打造的AI开发框架&#xff0c…

Vue 3 reactive 和 ref 区别及 失去响应性问题

在 Vue 3 中&#xff0c;reactive 和 ref 是实现响应式数据的两个核心 API&#xff0c;它们的设计目标和使用场景有所不同。以下是两者的详细对比&#xff1a; 1. 基本定义与核心功能 特性reactiveref作用创建对象类型的响应式代理&#xff08;对象、数组、Map 等&#xff09…

第一节:Vben Admin 最新 v5.0初体验

系列文章目录 基础篇 第一节&#xff1a;Vben Admin介绍和初次运行 第二节&#xff1a;Vben Admin 登录逻辑梳理和对接后端准备 第三节&#xff1a;Vben Admin登录对接后端login接口 第四节&#xff1a;Vben Admin登录对接后端getUserInfo接口 第五节&#xff1a;Vben Admin权…

Nginx部署spa单页面的小bug

没部署过&#xff0c;都是给后端干的&#xff0c;自己尝试部署了一个下午终于成功了 我遇到的最大的bug是进入后只有首页正常显示 其他页面全是404&#xff0c;于是问问问才知道&#xff0c;需要这个 location / { try_files $uri $uri/ /index.html; } 让…

面试算法高频08-动态规划-01

动态规划 递归知识要点 递归代码模板&#xff1a;提供递归代码的标准形式public void recur(int level, int param) &#xff0c;包含终止条件&#xff08;if (level> MAX_LEVEL)&#xff09;、当前层逻辑处理&#xff08;process(level, param)&#xff09;、向下一层递归…

若依框架前后端分离版部署全流程详解(本地+服务器+高级配置)

若依框架前后端分离版部署全流程详解&#xff08;本地服务器高级配置&#xff09; 若依&#xff08;RuoYi&#xff09;作为一款基于SpringBoot和Vue的权限管理系统&#xff0c;凭借其模块化设计和开箱即用的特性广受开发者欢迎。本文将从本地部署、服务器部署、高级配置三个维…

医疗设备预测性维护合规架构:从法规遵循到技术实现的深度解析

在医疗行业数字化转型加速推进的当下&#xff0c;医疗设备预测性维护已成为提升设备可用性、保障医疗安全的核心技术。然而&#xff0c;该技术的有效落地必须建立在严格的合规框架之上。医疗设备直接关乎患者生命健康&#xff0c;其维护过程涉及医疗法规、数据安全、质量管控等…

LLMs基础学习(七)DeepSeek专题(4)

LLMs基础学习&#xff08;七&#xff09;DeepSeek专题&#xff08;4&#xff09; 文章目录 LLMs基础学习&#xff08;七&#xff09;DeepSeek专题&#xff08;4&#xff09;DeepSeek-R1 训练过程的四个阶段具体流程小结 “规则化奖励”具体原因小结 “自我认知”&#xff08;se…