Android布局基础

53 阅读3分钟

布局的作用

  • 布局:布局是指对界面结构的全面规划与安排,通过api中提供的各种布局能够快速的完成对于界面的设计
  • 设计角度:设计师设计布局需要考虑美感要素(如按钮与文本的颜色搭配),而程序员要关注控件间的摆放关系
  • 实现方法
    • 使用API提供的布局框架
    • 分析界面元素关系后选择合适布局
  • 优势: 能快速完成界面实现

布局的种类

线性布局(LinearLayout)

  • 在这里插入图片描述
  • 排列方式: 子视图按照从上到下或从左到右的顺序依次排列,分为垂直线性布局和水平线性布局两种方向
  • 代码顺序: 写在最前面的子视图会放在最左边或最上面,后续视图依次向右或向下排列
  • 适用场景: 当控件需要从左至右或从上往下的规律排列时使用,是日常开发中使用最多的布局
  • 特点: 大部分布局效果都可以用线性布局实现,但不一定是最优选择

相对布局(RelativeLayout)

  • 在这里插入图片描述
  • 核心概念: 子视图的摆放位置不依赖于代码顺序,而是通过参照物确定(需要重点掌握参照物的选取和相对位置的定义方法)
  • 相对特性: 每个视图需要指定相对于其他视图或父容器的位置关系
  • 优势: 比线性布局更灵活,适合处理复杂的视图层级关系

帧布局(FrameLayout)

  • 在这里插入图片描述
  • 层次结构: 类似扑克牌堆叠,子视图按添加顺序一层层叠加
  • 显示特点: 上层的视图会遮盖下层视图,特别是当上层视图较大时
  • 使用技巧: 通过控制视图大小可以避免完全遮盖下层内容
  • 应用场景: 适合需要视图叠加显示的效果,如悬浮按钮等

表格布局(TableLayout)

  • 在这里插入图片描述
  • 排列方式: 类似表格的行列结构,有很强的规律性
  • 适用场景: 适合计算器等需要整齐行列排列的界面

网格布局(GridLayout)

  • 在这里插入图片描述
  • 相似布局: 与表格布局类似,都能创建整齐的行列排列
  • 区别: 网格布局(GridLayout)是后期新增的布局,与表格布局(TableLayout)在实现方式上有差异
  • 特点: 提供了更灵活的网格控制能力

约束布局(ConstraintLayout)

  • 在这里插入图片描述
  • 特点:通过锚点约束定位,减少嵌套层级,适合复杂界面
  • 现代布局: 是目前使用非常广泛的一种布局方式
  • 优势: 可以用较少代码实现复杂的布局效果

添加布局的方式

XML文件设计

  • XML文件设计:通过XML文件定义布局结构,使用setContentView()方法加载布局文件
  • 实现方式:在res/layout目录下创建XML布局文件
  • 加载方法:通过setContentView(R.layout.文件名)指定布局
  • 优势:可视化程度高,支持实时预览,便于维护
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
  • XML优势
    • 属性值清晰可见
    • 支持Design视图实时预览
    • 实现界面与逻辑分离
    • 维护性:XML文件更易于后期修改和调整

Java代码添加

  • Java代码添加:通过纯Java代码创建和配置布局对象,直接设置视图内容
  • 实现步骤:
    • 创建布局对象:new LinearLayout(context)
    • 设置布局参数:setLayoutParams()
    • 配置布局属性:如setBackgroundColor()
    • 设置内容视图:setContentView(view)
  • 缺点:代码量大,不直观,维护困难
public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // setContentView(R.layout.activity_main);

        // 1. 根布局为线性布局
        LinearLayout ll = new LinearLayout(this);
        // 2. 设置宽高
        ll.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT));
        // 3. 背景设置为红色
        ll.setBackgroundColor(Color.RED);
        // 4. 制定此activity的内容视图为该线性布局
        setContentView(ll);
    }
}

在这里插入图片描述