12. 【Android教程】绝对布局 AbsoluteLayout

简介: 12. 【Android教程】绝对布局 AbsoluteLayout

本节将介绍 Android 原生布局的最后一个布局,也是最不常用的布局——绝对布局(AbsoluteLayout)。目前在 Android SDK 中处于被弃用的状态,原因是前面学习过的 5 大布局太过强大。确实,绝对布局在开发中中可能从来都用不到,但是对于学习过高级教程的玩家,需要一方面扩展自己的知识面,另一方面需要学习绝对布局的设计思想及设计理念,这对我们今后的学习都是有益无害的。


1. 绝对布局的特性

顾名思义,绝对布局就是可以设置布局内 View 及 ViewGroup 所在的绝对位置。从名字上听起来它和相对布局(RelativeLayout)相反,所以这里我们还是用相对布局那一节(第8节)所提到的例子举例。


如果你想布置你的客厅,你可以将所有的家具都标上位置,比如空调在右上角、沙发靠下方墙面、茶几在中间靠下、电视机靠上方墙面等等。那么客厅就是你的 AbsoluteLayout,空调、沙发、茶几、电视等就是 View,然后我们给每个 View 设置一个坐标,这样一来就可以按照我们的要求布置客厅了。


AbsoluteLayout 的工作原理就是这么简单,如下图所示,直接对他的子 View 设置 X / Y 坐标,然后 Android 系统就会帮我们将各个 View 摆放到相应的位置。AbsoluteLayout 比较直观,但是也非常不灵活,兼容性差。现在 Android 系统的机型千奇百怪,难以通过一套坐标系就能适配到各个不同尺寸的手机上,就好像如果直接把别人的客厅家具摆放坐标照搬到自己家,很可能会摆出各种奇葩的设计,这也是 AbsoluteLayout 最大的一个缺陷。

2. 绝对布局的属性

AbsoluteLayout 的属性非常简单,从上面的了解你应该也能猜出一二:

  • android:id:
  • 唯一标识当前 View 的 id
  • android:layout_x:
    设置 View 的横坐标
  • android:layout_y:
    设置 View 的纵坐标

需要注意的是,这里所设置的横纵坐标均是 View 左上角的坐标,不是中心点

3. AbsoluteLayout 例子

大家还记得第 10 节中,我们通过 GridLayout 实现了一个登陆页面吗?这一节我们用 AbsoluteLayout 来实现一个简单的登陆页面。


首先我们需要一个 TextView 作为“账号”提示文案、一个 TextView 作为“密码”提示文案,再加两个 EditText 作为输入框,然后还有一个确认按键。最后在添加之后我们对每个 View 设置一个坐标即可,代码如下:

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="38dp"
        android:layout_y="38dp"
        android:text="账号" />
 
    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_x="131dp"
        android:layout_y="17dp"
        android:width="33dp" />
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="38dp"
        android:layout_y="66dp"
        android:text="密码" />
 
    <EditText
        android:layout_width="200dp"
        android:layout_height="wrap_content"
        android:layout_x="131dp"
        android:layout_y="40dp"
        android:width="33dp" />
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="39dp"
        android:layout_y="109dp"
        android:text="确认" />
</AbsoluteLayout>

最后的运行效果:

也许在我的这个设备上运行效果还行,你可以直接拷贝代码到自己的设备或者虚拟机上运行,会发现在不同尺寸的手机上效果差异会很大。极端情况如果你的屏幕更宽、或者干脆就是一台平板,那么我们的内容会全部集中在左侧,视觉效果就很差。

4. 小结

到这里,首先要恭喜你已经学完了 Android 所有的原生布局,对于 AbsoluteLayout 我们只需要了解,在未来的开发中并不推荐使用。更多的时候是采用 LinearLayout + RelativeLayout 来组合出不同的效果,主要借用 LinearLayout 的 weight 属性帮我们完成比例适配,然后 RelativeLayout 的相对位置可以让我们的布局更加灵活;


如果需要制作表格或者网格结果,那么 TableLayout / GridLayout 是当之无愧最佳之选;最后帧布局拥有强大的性能优势,很适合作为一个复杂布局的 root 布局,在能够使用的时候更推荐使用 FrameLayout。

Layout 的存在就是为了对 View 进行布局摆放,那么接下来的教程就开始进入 View 的讲解。


相关文章
|
14天前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
3月前
|
移动开发 监控 前端开发
构建高效Android应用:从优化布局到提升性能
【7月更文挑战第60天】在移动开发领域,一个流畅且响应迅速的应用程序是用户留存的关键。针对Android平台,开发者面临的挑战包括多样化的设备兼容性和性能优化。本文将深入探讨如何通过改进布局设计、内存管理和多线程处理来构建高效的Android应用。我们将剖析布局优化的细节,并讨论最新的Android性能提升策略,以帮助开发者创建更快速、更流畅的用户体验。
62 10
|
23天前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
70 0
|
3月前
|
编解码 Android开发
【Android Studio】使用UI工具绘制,ConstraintLayout 限制性布局,快速上手
本文介绍了Android Studio中使用ConstraintLayout布局的方法,通过创建布局文件、设置控件约束等步骤,快速上手UI设计,并提供了一个TV Launcher界面布局的绘制示例。
49 1
|
4月前
|
Android开发 Kotlin
kotlin开发安卓app,如何让布局自适应系统传统导航和全面屏导航
使用`navigationBarsPadding()`修饰符实现界面自适应,自动处理底部导航栏的内边距,再加上`.padding(bottom = 10.dp)`设定内容与屏幕底部的距离,以完成全面的布局适配。示例代码采用Kotlin。
123 15
|
3月前
|
XML 数据可视化 API
Android经典实战之约束布局ConstraintLayout的实用技巧和经验
ConstraintLayout是Android中一款强大的布局管理器,它通过视图间的约束轻松创建复杂灵活的界面。相较于传统布局,它提供更高灵活性与性能。基本用法涉及XML定义约束,如视图与父布局对齐。此外,它支持百分比尺寸、偏移量控制等高级功能,并配有ConstraintSet和编辑器辅助设计。合理运用可显著提高布局效率及性能。
198 0
|
3月前
|
Android开发
AutoX——当Android中clickable属性显示为false,实际可点击的布局如何处理
AutoX——当Android中clickable属性显示为false,实际可点击的布局如何处理
45 0
|
4月前
|
XML Android开发 数据安全/隐私保护
使用RelativeLayout布局Android界面
使用RelativeLayout布局Android界面
|
4月前
Android-自定义流布局标签
Android-自定义流布局标签
41 0
|
4月前
|
Android开发 索引
Android流布局实现筛选界面
Android流布局实现筛选界面
51 0