- Android 基础
- Android - 首页
- Android - 概述
- Android - 环境搭建
- Android - 架构
- Android - 应用组件
- Android - Hello World 示例
- Android - 资源
- Android - 活动 (Activities)
- Android - 服务 (Services)
- Android - 广播接收器 (Broadcast Receivers)
- Android - 内容提供商 (Content Providers)
- Android - 片段 (Fragments)
- Android - 意图/过滤器 (Intents/Filters)
- Android - 用户界面
- Android - UI 布局
- Android - UI 控件
- Android - 事件处理
- Android - 样式和主题
- Android - 自定义组件
- Android 高级概念
- Android - 拖放
- Android - 通知
- 基于位置的服务
- Android - 发送邮件
- Android - 发送短信
- Android - 电话呼叫
- 发布 Android 应用
- Android 实用示例
- Android - 警报对话框
- Android - 动画
- Android - 音频捕捉
- Android - AudioManager
- Android - 自动完成
- Android - 最佳实践
- Android - 蓝牙
- Android - 相机
- Android - 剪贴板
- Android - 自定义字体
- Android - 数据备份
- Android - 开发者工具
- Android - 模拟器
- Android - Facebook 集成
- Android - 手势
- Android - Google 地图
- Android - 图片特效
- Android - ImageSwitcher
- Android - 内部存储
- Android - JetPlayer
- Android - JSON 解析器
- Android - LinkedIn 集成
- Android - 加载动画
- Android - 本地化
- Android - 登录界面
- Android - MediaPlayer
- Android - 多点触控
- Android - 导航
- Android - 网络连接
- Android - NFC 指南
- Android - PHP/MySQL
- Android - 圆形进度条
- Android - 进度条
- Android - 推送通知
- Android - RenderScript
- Android - RSS 阅读器
- Android - 屏幕录制
- Android - SDK 管理器
- Android - 传感器
- Android - 会话管理
- Android - Shared Preferences
- Android - SIP 协议
- Android - 拼写检查
- Android - SQLite 数据库
- Android - 支持库
- Android - 测试
- Android - 文字转语音
- Android - TextureView
- Android - Twitter 集成
- Android - UI 设计
- Android - UI 模式
- Android - UI 测试
- Android - WebView 布局
- Android - Wi-Fi
- Android - 小部件
- Android - XML 解析器
- Android 资源
- Android - 问答
- Android - 资源
- Android - 讨论
Android - UI 布局
用户界面的基本构建块是View对象,它由View类创建,占据屏幕上的矩形区域,负责绘图和事件处理。View是widget的基类,widget用于创建交互式UI组件,如按钮、文本字段等。
ViewGroup是View的子类,它提供了一个不可见的容器,用于容纳其他View或ViewGroup,并定义它们的布局属性。
在第三层,我们有不同的布局,它们是ViewGroup类的子类,一个典型的布局定义了Android用户界面的视觉结构,可以使用View/ViewGroup对象在运行时创建,也可以使用简单的XML文件main_layout.xml声明布局,该文件位于项目的res/layout文件夹中。
布局参数
本教程主要介绍如何基于XML文件中定义的布局创建GUI。布局可以包含任何类型的widget,例如按钮、标签、文本框等。下面是一个包含LinearLayout的简单XML文件示例:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="This is a Button" /> <!-- More GUI components go here --> </LinearLayout>
创建布局后,可以在应用程序代码中,在您的Activity.onCreate()回调实现中加载布局资源,如下所示:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
Android 布局类型
Android提供了许多布局,您几乎会在所有Android应用程序中使用它们来提供不同的视图、外观和感觉。
序号 | 布局及描述 |
---|---|
1 |
线性布局 (LinearLayout)
LinearLayout是一个视图组,它沿单个方向(垂直或水平)排列所有子项。 |
2 |
相对布局 (RelativeLayout)
RelativeLayout是一个视图组,以相对位置显示子视图。 |
3 |
表格布局 (TableLayout)
TableLayout是一个视图,它将视图分组到行和列中。 |
4 |
绝对布局 (AbsoluteLayout)
AbsoluteLayout允许您指定其子项的确切位置。 |
5 |
框架布局 (FrameLayout)
FrameLayout是屏幕上的一个占位符,您可以使用它来显示单个视图。 |
6 |
列表视图 (ListView)
ListView是一个视图组,显示可滚动的项目列表。 |
7 |
网格视图 (GridView)
GridView是一个ViewGroup,以二维可滚动网格显示项目。 |
布局属性
每个布局都有一组属性来定义该布局的视觉属性。所有布局之间有一些共同的属性,还有一些特定于该布局的属性。以下是常用属性,将应用于所有布局
序号 | 属性及描述 |
---|---|
1 |
android:id 这是唯一标识视图的ID。 |
2 |
android:layout_width 这是布局的宽度。 |
3 |
android:layout_height 这是布局的高度。 |
4 |
android:layout_marginTop 这是布局顶部额外的空间。 |
5 |
android:layout_marginBottom 这是布局底部额外的空间。 |
6 |
android:layout_marginLeft 这是布局左侧额外的空间。 |
7 |
android:layout_marginRight 这是布局右侧额外的空间。 |
8 |
android:layout_gravity 这指定了子视图的位置。 |
9 |
android:layout_weight 这指定了应分配给视图的布局中额外空间的多少。 |
10 |
android:layout_x 这指定了布局的x坐标。 |
11 |
android:layout_y 这指定了布局的y坐标。 |
12 |
android:layout_width 这是布局的宽度。 |
13 |
android:paddingLeft 这是布局填充的左侧填充。 |
14 |
android:paddingRight 这是布局填充的右侧填充。 |
15 |
android:paddingTop 这是布局填充的顶部填充。 |
16 |
android:paddingBottom 这是布局填充的底部填充。 |
此处宽度和高度是布局/视图的尺寸,可以用dp(密度无关像素)、sp(比例无关像素)、pt(点,为1/72英寸)、px(像素)、mm(毫米)和in(英寸)来指定。
您可以使用精确的测量值指定宽度和高度,但更常见的是,您将使用以下常量之一来设置宽度或高度:
android:layout_width=wrap_content 告诉您的视图根据其内容所需的大小调整自身大小。
android:layout_width=fill_parent 告诉您的视图变得与其父视图一样大。
Gravity属性在定位视图对象方面起着重要作用,它可以采用一个或多个(用'|'分隔)以下常量值。
常量 | 值 | 描述 |
---|---|---|
top | 0x30 | 将对象推到其容器的顶部,而不改变其大小。 |
bottom | 0x50 | 将对象推到其容器的底部,而不改变其大小。 |
left | 0x03 | 将对象推到其容器的左侧,而不改变其大小。 |
right | 0x05 | 将对象推到其容器的右侧,而不改变其大小。 |
center_vertical | 0x10 | 将对象放置在其容器的垂直中心,而不改变其大小。 |
fill_vertical | 0x70 | 如果需要,增加对象的高度以使其完全填充其容器。 |
center_horizontal | 0x01 | 将对象放置在其容器的水平中心,而不改变其大小。 |
fill_horizontal | 0x07 | 如果需要,增加对象的宽度以使其完全填充其容器。 |
center | 0x11 | 将对象放置在其容器的垂直和水平轴的中心,而不改变其大小。 |
fill | 0x77 | 如果需要,增加对象的高度和宽度以使其完全填充其容器。 |
clip_vertical | 0x80 | 可以设置的附加选项,使子项的顶部和/或底部边缘剪辑到其容器的边界。剪辑将基于垂直重力:顶部重力将剪辑底部边缘,底部重力将剪辑顶部边缘,两者都不剪辑两个边缘。 |
clip_horizontal | 0x08 | 可以设置的附加选项,使子项的左侧和/或右侧边缘剪辑到其容器的边界。剪辑将基于水平重力:左侧重力将剪辑右侧边缘,右侧重力将剪辑左侧边缘,两者都不剪辑两个边缘。 |
start | 0x00800003 | 将对象推到其容器的开头,而不改变其大小。 |
end | 0x00800005 | 将对象推到其容器的结尾,而不改变其大小。 |
视图标识
视图对象可能有一个唯一ID分配给它,这将唯一地标识树中的视图。XML标签中的ID语法为:
android:id="@+id/my_button"
以下是@和+符号的简要说明:
@符号位于字符串的开头,表示XML解析器应该解析和扩展ID字符串的其余部分,并将其标识为ID资源。
加号(+)表示这是一个必须创建并添加到我们的资源中的新资源名称。要创建视图对象的实例并从布局中捕获它,请使用以下方法:
Button myButton = (Button) findViewById(R.id.my_button);