[MD]
这是一篇 ModernUI 的新手向小知识。
旨在分清这四个容易混淆的概念:Widget、Fragment、Layout、Menu
### Widget
中文名:组件
包:[icyllis.modernui.widget](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/package-summary.html)
Widget 是最基础的组件(按钮、文本框、图片、输入框等)
常用类:
- [TextView](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/TextView.html "class in icyllis.modernui.widget"):用来显示文本
- [Button](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/Button.html "class in icyllis.modernui.widget"):一个按钮
### Fragment
中文名:模块化界面
包:[icyllis.modernui.fragment.Fragment](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/fragment/package-summary.html)
类:[Fragment](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/fragment/Fragment.html)
Fragment 表示应用界面中可重复使用的一部分。Fragment 定义和管理自己的布局,具有自己的生命周期,并且可以处理自己的输入事件。
### Layout
中文名:布局组件
包:[icyllis.modernui.widget](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/package-summary.html)
布局定义了应用中的界面结构。
| 类名 | 名称 | 功能 |
| :---------------: | :----------------------------------------------------------------------------------------------------------------------------------: | :-----------------------------: |
| AbsoluteLayout | [绝对布局](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/AbsoluteLayout.html) | 指定其子项的确切位置(x/y 坐标) |
| CoordinatorLayout | [协调员布局](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/CoordinatorLayout.html) | 强大的布局(适合做父布局) |
| FrameLayout | [框架布局](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/FrameLayout.html "class in icyllis.modernui.widget") | FrameLayout 旨在遮挡屏幕上的某个区域以显示单个项目 |
| GridLayout | [网格布局](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/GridLayout.html "class in icyllis.modernui.widget") | 将其子项放置在矩形网格中的布局 |
| LinearLayout | [线性布局](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/LinearLayout.html "class in icyllis.modernui.widget") | 用户可以滚动的视图层次结构的布局容器,允许它大于屏幕 |
| RelativeLayout | [相对布局](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/RelativeLayout.html "class in icyllis.modernui.widget") | 可以描述子级的位置,可以相对于彼此或相对于父级进行描述 |
| TabLayout | [选项卡布局](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/TabLayout.html "class in icyllis.modernui.widget") | 提供水平布局来显示选项卡 |
| TableLayout | [表格布局](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/widget/TableLayout.html "class in icyllis.modernui.widget") | 将其子项排列为行和列的布局 |
### Menu
中文名:菜单
包:[icyllis.modernui.view.menu](https://blocamlimb.github.io/ModernUI/javadoc/icyllis/modernui/view/menu/package-summary.html)
Menu 是一个标准的界面操作面板。
#### Menu 和 Layout有什么区别?Layout 不是也能做菜单吗?我该选择谁?
最核心的区别:Menu 是一种**规范**,Layout 是一种**实现**。
大多数应用都拥有一些通用的操作按钮(例如关闭窗口、分享、收藏/喜欢、设置),如果每次都自己用 Widget 乃至 Layout 来重新造一遍轮子,就过于麻烦了。
所以 Menu 就出现了。直接使用 Menu,可以简单地、高效地编写用户界面。
Layout 是一种**界面布局**,可以实现**高度定制化**、**优美的动画**、**复杂交互**等功能。
### 安卓开发?
如果你具有安卓开发的经验,就会发现,有种莫名的熟悉感。
[安卓开发 - Menu](https://developer.android.google.cn/develop/ui/views/components/menus?hl=zh-cn) [安卓开发 - Widget](https://developer.android.google.cn/design/ui/mobile/guides/widgets?hl=zh-cn) [安卓开发 - Layout](https://developer.android.google.cn/design/ui/mobile/guides/layout-and-content/layout-basics?hl=zh-cn) [安卓开发 - Fragment](https://developer.android.google.cn/guide/fragments?hl=zh-cn)
嗯确实。很多安卓教程对于 ModernUI 开发者来说是可以参考的。但是安卓开发和 ModernUI 总归是有区别的:对于一些安卓开发组件,ModernUI 并没有实现,比如 **Activity**
[/MD]