• 【Android】-- 四种布局方式(线性布局、相对布局、网格布局、和滚动视图)


    四种布局:线性布局LinearLayout、相对布局RelativeLayout、网格布局GridLayout、和滚动视图ScrollView

    目录

    一、线性布局LinearLayout

    线性布局的权重

     二、相对布局RelativeLayout

    相对位置的取值

     三、网格布局GridLayout

    四、滚动视图ScrollView

     


    一、线性布局LinearLayout

    有两种排序方式:

    • orientation属性值为horizontal时,内部视图在水平方向从左往右排列。
    • orientation属性值为vertical时,内部视图在垂直方向从上往下排列。

    如果不指定orientation属性,则LinearLayout默认水平方向排列。

    线性布局的权重

    指线性布局的下级视图各自拥有多大比例的宽高。

    属性名为layout_weight,但该属性不在LinearLayout节点设置,而在线性布局的直接下级视图设置,表示改下级视图占据的宽高比例。

    • layout_width为0dp时,表示水平方向的宽度比例
    • layout_height为0dp时,表示垂直方向的高度比例。

    例:

    第一个线性布局:width = 0dp 说明在水平方向设置宽度比例,weight = 1,占据weight总数的1/2,则占据一半空间。

    第二个线性布局:height = 0dp 说明在垂直方向设置宽度比例,weight = 1,占据weight总数的1/3,则占据三分之一空间。

    1. <LinearLayout
    2. android:layout_width="match_parent"
    3. android:layout_height="wrap_content"
    4. android:orientation="horizontal">
    5. <TextView
    6. android:layout_width="0dp"//宽度为0dp,通过权重设置宽度比例
    7. android:layout_height="wrap_content"
    8. android:layout_weight="1"//weight为1,下面的weight也为1,占1/2,即宽度比例占1/2
    9. android:text="横排第一个"
    10. android:textSize="17sp"
    11. android:textColor="#000000"/>
    12. <TextView
    13. android:layout_width="0dp"
    14. android:layout_height="wrap_content"
    15. android:layout_weight="1"
    16. android:text="横排第二个"
    17. android:textSize="17sp"
    18. android:textColor="#000000"/>
    19. </LinearLayout>
    20. <LinearLayout
    21. android:layout_width="match_parent"
    22. android:layout_height="wrap_content"
    23. android:orientation="vertical">
    24. <TextView
    25. android:layout_width="wrap_content"
    26. android:layout_height="0dp"//高度为0dp,通过权重设置高度比例
    27. android:layout_weight="1"//weight为1,下面的weight为2,占1/3,即宽度比例占1/3
    28. android:text="竖排第一个"
    29. android:textSize="17sp"
    30. android:textColor="#000000"/>
    31. <TextView
    32. android:layout_width="wrap_content"
    33. android:layout_height="0dp"
    34. android:layout_weight="2"
    35. android:text="竖排第二个"
    36. android:textSize="17sp"
    37. android:textColor="#000000"/>
    38. </LinearLayout>

     二、相对布局RelativeLayout

    相对布局的视图位置由平级或上级视图决定,用于确定下级视图位置的参考物分两种:

    • 与该视图自身平级的视图;
    • 该视图的上级视图

    如果不设定下级视图的参照物,那么下级视图默认显示在RelativeLayout内部的左上角。

    相对位置的取值

     例:

    1. <TextView
    2. android:id="@+id/tv_center"
    3. android:layout_width="wrap_content"
    4. android:layout_height="wrap_content"
    5. android:background="#ffffff"
    6. android:layout_centerInParent="true"
    7. android:text="中间"
    8. android:textSize="11sp"
    9. android:textColor="#000000"/>
    10. <TextView
    11. android:layout_width="wrap_content"
    12. android:layout_height="wrap_content"
    13. android:background="#ffffff"
    14. android:layout_centerHorizontal="true"
    15. android:text="水平中间"
    16. android:textSize="11sp"
    17. android:textColor="#000000"/>
    18. <TextView
    19. android:layout_width="wrap_content"
    20. android:layout_height="wrap_content"
    21. android:background="#ffffff"
    22. android:layout_centerVertical="true"
    23. android:text="垂直中间"
    24. android:textSize="11sp"
    25. android:textColor="#000000"/>
    26. <TextView
    27. android:layout_width="wrap_content"
    28. android:layout_height="wrap_content"
    29. android:background="#ffffff"
    30. android:layout_alignParentLeft="true"
    31. android:text="上级左边对齐"
    32. android:textSize="11sp"
    33. android:textColor="#000000"/>
    34. <TextView
    35. android:layout_width="wrap_content"
    36. android:layout_height="wrap_content"
    37. android:background="#ffffff"
    38. android:layout_toLeftOf="@id/tv_center"
    39. android:layout_alignTop="@id/tv_center"
    40. android:text="中间左边"
    41. android:textSize="11sp"
    42. android:textColor="#000000"/>
    43. <TextView
    44. android:layout_width="wrap_content"
    45. android:layout_height="wrap_content"
    46. android:background="#ffffff"
    47. android:layout_above="@id/tv_center"
    48. android:layout_alignLeft="@id/tv_center"
    49. android:text="中间上边"
    50. android:textSize="11sp"
    51. android:textColor="#000000"/>

     三、网格布局GridLayout

    网格布局支持多行多列的表格排列。

    网格布局默认从左往右、从上到下排列,新增两个属性:

    • columnCount属性:指定网格的列数,即每行能放多少视图。
    • rowCount属性:指定网格行数,即每列能放多少视图。

    例:

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:app="http://schemas.android.com/apk/res-auto"
    4. xmlns:tools="http://schemas.android.com/tools"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent"
    7. android:columnCount="2"
    8. android:rowCount="2">
    9. <TextView
    10. android:layout_width="0dp"//设置权重,占满屏幕
    11. android:layout_columnWeight="1"
    12. android:layout_height="60dp"
    13. android:background="#ffcccc"
    14. android:text="浅红色"
    15. android:gravity="center"//设置文字位于网格中间
    16. android:textColor="#000000"
    17. android:textSize="17sp"/>
    18. <TextView
    19. android:layout_width="0dp"
    20. android:layout_height="60dp"
    21. android:layout_columnWeight="1"
    22. android:background="#ffaa00"
    23. android:text="浅红色"
    24. android:gravity="center"
    25. android:textColor="#000000"
    26. android:textSize="17sp"/>
    27. <TextView
    28. android:layout_width="0dp"
    29. android:layout_height="60dp"
    30. android:layout_columnWeight="1"
    31. android:background="#00ff00"
    32. android:text="绿色"
    33. android:gravity="center"
    34. android:textColor="#000000"
    35. android:textSize="17sp"/>
    36. <TextView
    37. android:layout_width="0dp"
    38. android:layout_height="60dp"
    39. android:layout_columnWeight="1"
    40. android:background="#660066"
    41. android:text="深紫色"
    42. android:gravity="center"
    43. android:textColor="#000000"
    44. android:textSize="17sp"/>
    45. </GridLayout>

     

    四、滚动视图ScrollView

    有两种:

    • ScrollView:垂直方向的滚动视图,垂直方向滚动时,layout_width属性值设置为match_parent,layout_height 属性值设置为wrap_content。
    • HorizontalScrollView:水平方向的滚动视图,水平方向滚动时,layout_width属性值设置为wrap_content,layout_height属性值设置为match_parent。

    例:

    水平方向两个View共600dp,超出屏幕,所以上级视图使用HorizontalScrollView,宽度自适应,高度跟随上级视图。

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:app="http://schemas.android.com/apk/res-auto"
    4. xmlns:tools="http://schemas.android.com/tools"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent"
    7. android:orientation="vertical">
    8. <HorizontalScrollView
    9. android:layout_width="wrap_content"
    10. android:layout_height="200dp">
    11. <!-- 水平方向的线性布局-->
    12. <LinearLayout
    13. android:layout_width="wrap_content"//宽度自适应
    14. android:layout_height="match_parent"//高度跟随上级视图
    15. android:orientation="horizontal">//水平排列
    16. <View
    17. android:layout_width="300dp"//宽度自定义,超出屏幕
    18. android:layout_height="match_parent"
    19. android:background="#aaffff"/>
    20. <View
    21. android:layout_width="300dp"
    22. android:layout_height="match_parent"
    23. android:background="#ffff00"/>
    24. </LinearLayout>
    25. </HorizontalScrollView>
    26. <!-- 垂直方向的线性布局-->
    27. <ScrollView
    28. android:layout_width="match_parent"
    29. android:layout_height="wrap_content">
    30. <LinearLayout
    31. android:layout_width="wrap_content"
    32. android:layout_height="match_parent"
    33. android:orientation="vertical">
    34. <View
    35. android:layout_width="match_parent"
    36. android:layout_height="400dp"
    37. android:background="#aaffff"/>
    38. <View
    39. android:layout_width="match_parent"
    40. android:layout_height="400dp"
    41. android:background="#ffff00"/>
    42. </LinearLayout>
    43. </ScrollView>
    44. </LinearLayout>

     


  • 相关阅读:
    【深度学习】CycleGAN开源项目学习笔记 | 完整流程 | 报错总结 | pytorch
    [附源码]Java计算机毕业设计SSM仿咸鱼二手物品交易系统
    Vue对象复制 数组复制 复制数组 浅复制 深复制 对象引用
    Leetcode查找(Python和java实现)
    【10】Spring源码-分析篇-AOP源码分析
    为荣誉而战!祝贺Bulk Transfer摄像头调试成功
    1.在vsCode上创建Hello,World
    day58 单调栈.p1
    flutter系列之:如何自定义动画路由
    DJYGUI系列文章四:GK文本显示
  • 原文地址:https://blog.csdn.net/Tir_zhang/article/details/126783783