一、UI 开发基础概念(初学者必看)

在学习具体控件前,先理解以下核心概念,能大幅降低后续学习难度:

1. View 与 ViewGroup 的关系
  • View:所有 UI 控件的基类(如 Button、TextView),是一个 “可视元素”。
  • ViewGroup:特殊的 View,可包含多个 View(如 LinearLayout、ConstraintLayout),是 “容器”。
  • 关系:ViewGroup → View → 子 View → 子 ViewGroup → 子 View(形成树状结构)。
2. 尺寸单位
  • px(像素):屏幕实际像素点,不推荐直接使用(不同设备像素密度不同,显示效果不一致)。
  • dp(密度无关像素):推荐单位,系统会根据屏幕密度自动转换为 px(如 1dp 在低密度屏幕≈1px,高密度≈2px)。
  • sp(缩放像素):专门用于文字大小,会随用户设置的字体大小缩放(建议文字用 sp,其他用 dp)。
3. 资源引用规则

在 XML 中引用资源的统一格式:

@[资源类型]/[资源名称]  <!-- 引用已有资源 -->
@+[资源类型]/[资源名称] <!-- 定义新资源(如ID) -->
android:text="@string/hello"     <!-- 引用strings.xml中的字符串 -->
android:src="@drawable/icon"    <!-- 引用drawable目录下的图片 -->
android:id="@+id/btn_login"     <!-- 定义新ID -->

二、核心控件属性详解(附示例)

1. 文本控件(TextView & EditText)

TextView 示例

<TextViewandroid:id="@+id/tv_title"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/welcome"android:textSize="20sp"android:textColor="#333333"android:textStyle="bold"android:maxLines="2"android:ellipsize="end"android:padding="10dp"android:gravity="center"/>

EditText 示例

<EditTextandroid:id="@+id/et_username"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="@string/input_username"android:textSize="16sp"android:inputType="textPersonName"android:maxLength="20"android:padding="12dp"android:background="@drawable/round_edittext_bg"/>
2. 按钮控件(Button & ImageButton)

Button 示例

<Buttonandroid:id="@+id/btn_login"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="@string/login"android:textSize="18sp"android:textColor="#FFFFFF"android:background="@drawable/btn_selector" <!-- 状态选择器(按下/正常) -->android:padding="14dp"android:layout_marginTop="20dp"/>

ImageButton 示例

<ImageButtonandroid:id="@+id/btn_back"android:layout_width="48dp"android:layout_height="48dp"android:src="@drawable/ic_back"android:background="@android:color/transparent" <!-- 透明背景 -->android:contentDescription="@string/back"/>
3. 图片控件(ImageView)

示例(头像显示)

<ImageViewandroid:id="@+id/iv_avatar"android:layout_width="80dp"android:layout_height="80dp"android:src="@drawable/default_avatar"android:scaleType="centerCrop" <!-- 居中裁剪,避免变形 -->android:background="@drawable/circle_bg" <!-- 圆形背景 -->android:padding="2dp"/>

三、布局容器实战(重点难点)

1. LinearLayout 权重(weight)详解

场景:横向三个按钮,等宽分布

<LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:layout_width="0dp" <!-- 必须设置为0dp -->android:layout_height="wrap_content"android:layout_weight="1"android:text="按钮1"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="按钮2"/><Buttonandroid:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:text="按钮3"/>
</LinearLayout>

原理:总权重为 3,每个按钮权重 1,各占 1/3 宽度。

2. ConstraintLayout 约束实践

场景:实现一个登录表单(用户名、密码、登录按钮)

<androidx.constraintlayout.widget.ConstraintLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/iv_logo"android:layout_width="100dp"android:layout_height="100dp"android:src="@drawable/logo"app:layout_constraintTop_toTopOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.2"/> <!-- 垂直偏移20% --><EditTextandroid:id="@+id/et_username"android:layout_width="0dp" <!-- 0dp表示受约束控制 -->android:layout_height="wrap_content"android:hint="用户名"app:layout_constraintTop_toBottomOf="@id/iv_logo"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.5"android:layout_marginTop="40dp"android:layout_marginStart="30dp"android:layout_marginEnd="30dp"/><EditTextandroid:id="@+id/et_password"android:layout_width="0dp"android:layout_height="wrap_content"android:hint="密码"android:inputType="textPassword"app:layout_constraintTop_toBottomOf="@id/et_username"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"android:layout_marginTop="20dp"android:layout_marginStart="30dp"android:layout_marginEnd="30dp"/><Buttonandroid:id="@+id/btn_login"android:layout_width="0dp"android:layout_height="wrap_content"android:text="登录"app:layout_constraintTop_toBottomOf="@id/et_password"app:layout_constraintStart_toStartOf="parent"app:layout_constraintEnd_toEndOf="parent"android:layout_marginTop="40dp"android:layout_marginStart="30dp"android:layout_marginEnd="30dp"/>
</androidx.constraintlayout.widget.ConstraintLayout>

约束要点

  • toTopOf/toBottomOf/toStartOf/toEndOf:指定相对于其他控件的位置。
  • 0dp:表示宽度 / 高度由约束自动计算。
  • bias:偏移量(0-1),控制水平 / 垂直方向的位置。

四、自定义控件样式(提升 UI 颜值)

1. 自定义圆角按钮

创建res/drawable/btn_rounded.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"><solid android:color="#4CAF50"/> <!-- 填充色 --><corners android:radius="24dp"/> <!-- 圆角半径 --><paddingandroid:bottom="12dp"android:left="24dp"android:right="24dp"android:top="12dp"/> <!-- 内边距 -->
</shape>

在 Button 中引用:

<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="圆角按钮"android:background="@drawable/btn_rounded"/>
2. 按钮状态选择器(按下 / 正常效果)

创建res/drawable/btn_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:state_pressed="true"android:drawable="@drawable/btn_pressed"/> <!-- 按下状态 --><item android:state_focused="true"android:drawable="@drawable/btn_focused"/> <!-- 聚焦状态 --><item android:drawable="@drawable/btn_normal"/> <!-- 默认状态 -->
</selector>

五、常见问题与解决方案(避坑指南)

1. 文本显示不全(超出屏幕)

原因:未设置maxLinesellipsize
解决方案

<TextViewandroid:maxLines="2"android:ellipsize="end"/>
2. 图片显示变形

原因:未设置scaleType,默认fitXY会拉伸图片。
解决方案

<ImageViewandroid:scaleType="centerCrop"/> <!-- 常用裁剪模式 -->
3. 布局层级过深导致卡顿

优化方案

  • 使用 ConstraintLayout 减少嵌套。
  • 使用<merge>标签合并布局层级。
  • 复杂布局考虑使用<ViewStub>延迟加载。

六、学习资源推荐(初学者必收藏)

  1. 官方文档
    • Android Developers - UI 组件
    • ConstraintLayout 官方指南
  2. 优质教程
    • Google Codelabs - Android UI 开发
  3. UI 设计资源
    • Material Design:官方设计语言指南。
    • IconFont:免费图标库(适配 Android)。

总结

掌握 Android UI 开发的关键在于:

  1. 理解基础概念(View/ViewGroup、尺寸单位、资源引用)。
  2. 熟悉核心控件属性(特别是文本、按钮、图片控件)。
  3. 精通布局容器(LinearLayout 权重、ConstraintLayout 约束)。
  4. 多实践多试错(遇到问题先查官方文档,再看 Stack Overflow)。

 

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

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

相关文章

关于linux运维 出现高频的模块认知

一、Linux 基础核心&#xff08;必掌握&#xff09;核心工具&#xff1a;Shell 脚本、Systemd、用户权限管理、日志分析&#xff08;journalctl、rsyslog&#xff09;企业需求&#xff1a;中小型公司&#xff1a;需独立完成系统部署、故障排查&#xff0c;对脚本开发&#xff0…

手语式映射:Kinova Gen3 力控机械臂自适应控制的研究与应用

近日&#xff0c;美国明尼苏达大学研究团队在《从人手到机械臂&#xff1a;遥操作中运动技能具身化研究》中&#xff0c;成功开发出基于​​Kinova的7轴力控机械臂Gen3的智能控制系统。这项创新性技术通过人工智能算法&#xff0c;实现了人类手臂动作到机械臂运动的精准映射&am…

P5535 【XR-3】小道消息

题目描述 小 X 想探究小道消息传播的速度有多快&#xff0c;于是他做了一个社会实验。 有 n 个人&#xff0c;其中第 i 个人的衣服上有一个数 i1。小 X 发现了一个规律&#xff1a;当一个衣服上的数为 i 的人在某一天知道了一条信息&#xff0c;他会在第二天把这条信息告诉衣…

ChatGPT Agent架构深度解析:OpenAI如何构建统一智能体系统

引言&#xff1a;AI智能体的范式跃迁 2025年7月17日&#xff0c;OpenAI发布的ChatGPT Agent标志着对话式AI从“被动应答”向主动执行的历史性转变。这款融合Operator网页操作与Deep Research信息分析能力的新型智能体&#xff0c;通过统一架构设计实现了复杂任务的端到端自主执…

计算机网络(第八版)— 第2章课后习题参考答案

2-01 物理层要解决哪些问题&#xff1f;物理层的主要特点是什么&#xff1f;答&#xff1a;物理层要解决的主要问题&#xff1a;&#xff08;1&#xff09;物理层要尽可能地屏蔽掉物理设备和传输媒体&#xff0c;通信手段的不同&#xff0c;使数据链路层感觉不到这些差异&#…

Hive【Hive架构及工作原理】

✨博客主页&#xff1a; https://blog.csdn.net/m0_63815035?typeblog &#x1f497;《博客内容》&#xff1a;.NET、Java.测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 &#x1f4e2;博客专栏&#xff1a; https://blog.csdn.net/m0_63815035/cat…

数据管理能力成熟度评估模型(DCMM)详解

数据管理能力成熟度评估模型(DCMM)详解 1. DCMM概述 数据管理能力成熟度评估模型(Data Management Capability Maturity Assessment Model, DCMM)是我国首个数据管理领域的国家标准(GB/T 36073-2018)&#xff0c;由国家工业信息安全发展研究中心牵头制定。该模型为我国企业数据…

学习C++、QT---34(使用QT库实现串口调试助手01:解决串口调试助手的UI)

&#x1f31f; 嗨&#xff0c;我是热爱嵌入式的涛涛同学&#xff01;每日一言别害怕改变&#xff0c;走出舒适圈才能遇见更好的自己。串口调试助手项目好的现在我们来学习串口调试助手的项目&#xff0c;我们依旧是项目引领学习好的我们最后就是要做成一个类似我们市面上的串口…

Dockerfile 文件及指令详解

什么是Dockerfile 文件Dockerfile 文件是用于构建 docker 镜像的脚本文件&#xff0c;由一系列的指令构成。通过 docker build 命令构建镜像时&#xff0c;Dockerfile 文件中的指令会由上到下执行&#xff0c;每条 指令都将会构建出一个镜像层&#xff0c;这就是镜像的分层。因…

主流Java Redis客户端对决:Jedis、Lettuce与Redisson性能特性深度评测

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 持续学习&#xff0c;不断…

刷题日记0725

今日计划5道。2/5晚上被一些事影响了心神不宁&#xff0c;再加上感觉睡前做完时间有点紧&#xff0c;逃避的念头出现了。代码意思不进脑子了。做一道是一道。21. 合并两个有序链表默认构造​​&#xff1a;用于创建​​值为0的孤立节点​​&#xff08;不连接其他节点&#xff…

从数据脱敏到SHAP解释:用Streamlit+XGBoost构建可复现的川崎病诊断系统

基于机器学习的川崎病辅助诊断工具&#xff0c;结合了数据预处理、模型训练、特征解释和交互式可视化。以下是深度解读&#xff1a;1. 技术架构框架&#xff1a;使用 Streamlit 构建 Web 应用&#xff0c;适合快速开发交互式数据科学应用。核心算法&#xff1a;XGBoost&#xf…

【C++详解】模板进阶 非类型模板参数,函数模板特化,类模板全特化、偏特化,模板分离编译

文章目录一、非类型模板参数应用场景二、模板的特化函数模板特化类模板特化全特化偏特化三、模板分离编译解决方法四、模板总结一、非类型模板参数 先前介绍的函数模板和类模板都是针对类型的类模板参数&#xff0c;非类型模板参数有哪些使用场景呢&#xff1f;我们先来看下面这…

10BASE-T1S核心机制——PLCA参数详解

导语&#xff1a; PLCA是10BASE-T1S的核心机制&#xff0c;了解PLCA才能更好地使用10BASE-T1。 本文将通过介绍具体配置&#xff0c;以及实战例子&#xff0c;带你掌握PLCA。 以下测试内容使用KUNHONG-U10BT1S-EVB设备测试&#xff0c; 设备符合IEEE 802.3cg标准&#xff0…

uniapp vue apk那边输入法遮挡页面内容

解决办法&#xff1a;pages.json配置如下{"globalStyle": {"app-plus": {"softinputMode": "adjustResize"}} }效果&#xff1a; 键盘弹出时自动调整窗口大小&#xff0c;所有内容上推&#xff08;兼容性最佳&#xff09;文件内容如下…

2507C++,系统服务0与1

原文 窗口上的系统调用通过,每个由系统调用(x64)或sysenter(x86)CPU指令调用的NTDLL.dll,如NTDLL的NtCreateFile的以下输出所示: 这里 0:000> u ntdll!NtCreateFile: 00007ffcc07fcb50 4c8bd1 mov r10,rcx 00007ffcc07fcb53 b855000000 mov eax,55h…

人工智能冗余:大语言模型为何有时表现不佳(以及我们能做些什么)

像 GPT - 4 这样的大语言模型&#xff08;LLMs&#xff09;彻底改变了我们与技术交互的方式。它们可以撰写文章、生成代码、回答问题&#xff0c;甚至帮助我们构思创意。但任何花时间使用过这些模型的人都知道&#xff0c;它们的输出有时会让人感觉……不太对劲。表述冗长、格式…

Cursor替代品亚马逊出品Kiro下载

Cursor替代品亚马逊出品Kiro下载 支持Claude Sonnet4.0与3.7 点击下载 备用链接&#xff1a;https://pan.xunlei.com/s/VOW-nBmVgR3ewIIAm7jDsf99A1?pwd6bqu#

MySQL 事务管理

一、前言 CURD 不加控制&#xff0c;会有什么问题&#xff1f; CURD 满足什么属性&#xff0c;能解决上述问题&#xff1f; 买票的过程得是原子的。买票应该不能受互相的影响。买完票应该要永久有效。买前和买后都要是确定的状态。 什么是事务&#xff1f; 事务就是一组 DML 语…

yarn在macOS上的安装与镜像源配置:全方位指南

在前端开发领域&#xff0c;高效的包管理工具是提升开发效率的关键。yarn 作为一款由 Facebook 推出的包管理器&#xff0c;凭借其快速、可靠、安全的特性&#xff0c;逐渐成为众多开发者的首选。对于 macOS 用户而言&#xff0c;正确安装 yarn 并合理配置镜像源&#xff0c;能…