Some Layout Widget in Android App

Android应用中一些常用的布局控件

LinerLayout 线性布局

性布局控件,它包含的子控件将以横向或竖向的方式排列

主要属性:

  • orientation 显示方式: HORIZONTAL(0)、VERTICAL(1)
  • layout_weight 权重: 默认0 ,表示按照widgets或者是containers实际大小来显示,若高于0的值,则将 Container剩余可用空间分割,分割大小具体取决于每一个widget或者是 container的layout_weight及该权值在所有widgets或者是containers中的比例
  • baselineAligned 是否允许用户调整它内容的基线: true/false
  • baselineAlignedChildIndex 当前LinearLayout与其它View的对齐方式:
  • gravity 对齐方式(本元素里的所有元素的重力方向)。其值有:top、bottom、left、right、center_vertical、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、clip_horizontal
  • layout_gravity 相对于父元素的重力方向
  • measureWithLargestChild 当被设置为真时,所有的子控件将被认为是具有权重最小面积最大的子控件

RelativeLayout 相对布局

_子控件的主要属性_:

  • layout_centerInParent 相对于父元素完全居中
  • layout_centerHorizontal 水平居中
  • layout_centerVertical 垂直居中
  • layout_alignParentBottom 贴紧父元素的下边缘
  • layout_alignParentLeft 贴紧父元素的左边缘 
  • layout_alignParentRight 贴紧父元素的右边缘 
  • layout_alignParentTop 贴紧父元素的上边缘 
  • layout_below      在某元素的下方 
  • layout_above      在某元素的的上方 
  • layout_toStartOf  在某元素的左边 
  • layout_toEndOf  在某元素的右边
  • layout_alignTop  本元素的上边缘和某元素的的上边缘对齐 

  * layout_alignStart 本元素的左边缘和某元素的的左边缘对齐 

  • layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐 

  * layout_alignEnd  本元素的右边缘和某元素的的右边缘对齐

FrameLayout 帧布局

帧布局的容器中无论放入多少个控件,控件默认情况下左上角都对齐到容器的左上角,如果控件一样大,同一时间只能见到最上面

和RelativeLayout类似

TableLayout 表格布局

和GridLayout的区别是GridLayout只能制定每一列宽度一样的表格布局,而TableLayout能够制定各列宽度不一样的表格布局。

主要属性:

  • collapseColumns: ”0,1” 隐藏第0列和第1列
  • stretchColumns: ”0,1” 第0列和第1列可以向行方向扩展
  • stretchColumns: ”*” 所有列可以向行方向扩展
  • shrinkColumns: ”0,1” 第0列和第1列可以向列方向扩展

_子控件的主要属性_:

  • layout_column: ”1” 该控件显示在第1列
  • layout_span: ”2” 该控件占据2列

ConstraintLayout 约束布局

类 androidx.constraintlayout.widget.ConstraintLayout
ConstraintLayout是RelativeLayout的升级版,它允许我们在Layout上设计子控件与子控件之间的位置关系,而且它远比RelativeLayout在Android Studio中表现的效果更灵活、更容易使用。

在项目需要引用依赖

implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

子控件主要属性

  • layout_constraintLeft_toLeftOf 把A的left side放在B的left side(左边对齐)
  • layout_constraintLeft_toRightOf 把A的left side放在B的right side(左边相对右边对齐)
  • layout_constraintRight_toLeftOf 把A的right side放在B的left side(右边相对左边对齐)
  • layout_constraintRight_toRightOf 把A的right side放在B的right side(右边对齐)
  • layout_constraintTop_toTopOf 把A的top side放在B的top side(顶部对齐)
  • layout_constraintTop_toBottomOf 把A的top side放在B的bottom side(顶部相对底部对齐)
  • layout_constraintBottom_toTopOf 把A的bottom side放在B的top side(底部相对顶部对齐)
  • layout_constraintBottom_toBottomOf 把A的bottom side放在B的bottom side(底部对齐)
  • layout_constraintStart_toEndOf 把A的start position放在B的end position(起始位置相对结束位置对齐)
  • layout_constraintStart_toStartOf 把A的start position放在B的start position(起始位置对齐)
  • layout_constraintEnd_toStartOf 把A的end position放在B的start position(结束位置相对起始位置对齐)
  • layout_constraintEnd_toEndOf 把A的end position放在B的end position(结束位置对齐)
  • layout_constraintBaseline_toBaselineOf 把A的bottom side放在B的top side(基准线对齐)

偏斜(Bias)

在使用LinearLayout时,会使用Gravity来将水平或者垂直排列的控件按照权重的分配进行排列。而在ConstraintLayout中,它提供了bias属性来对控件进行权重的分配。
  • layout_constraintHorizontal_bias 水平方向偏移系数
  • layout_constraintVertical_bias 垂直方向偏移系数

隐藏

当在ConstraintLayout中,若一个控件隐藏(GONE)之后,它会变成一个点,因此对于把该控件作为参考控件的其它控件依然具有约束作用。
  • layout_goneMarginLeft 隐藏控件左边距
  • layout_goneMarginRight 隐藏控件右边距
  • layout_goneMarginTop 隐藏控件顶部边距
  • layout_goneMarginBottom 隐藏控件底部边距
  • layout_goneMarginStart 隐藏控件起始边距
  • layout_goneMarginEnd 隐藏控件结束边距

宽高比

  • layout_constraintDimensionRatio ="16:6" 属性设置一个比例即可(先将宽或者高设置为0dp/MATCH_CONSTRAINT)
  • layout_constraintWidth_default="percent" // 设置宽为百分比 (相对父控件)
  • layout_constraintWidth_percent="0.3" // 0到1之间的值
  • layout_constraintHeight_default="percent" // 设置高为百分比
  • layout_constraintHeight_percent="0.3" // 0到1之间的值

Chain属性

链条在同一个轴上(水平或者垂直)提供一个类似群组的统一表现

如果一组小部件通过双向连接(见图,显示最小的链,带有两个小部件),则将其视为链条

当在链的第一个元素上设置属性 layout_constraintHorizontal_chainStyle 或layout_constraintVertical_chainStyle 时,链的行为将根据指定的样式(默认为CHAIN_SPREAD)而更改

  • layout_constraintHorizontal_chainStyle 水平方向上的Chain: 展开(spread)、内部展开(spread_inside)、包裹(packed)
  • layout_constraintVertical_chainStyle 垂直方向上的Chain:
  • Spread链模式: 把空间平均分配开来,每个View占有各自的平分空间,它是Chain属性的默认模式。

      可以配合weight属性设置spread的权重,在设置权重的时候,我们需要将控件的width或者height设置成0dp,并设置layout_constraintHorizontal_weight或者layout_constraintVertical_weight的值:
  • Spread Inside链模式: 把两边最边缘的两个View到外向父组件边缘的距离去除,然后让剩余的Views在剩余的空间内部平分空间。
  • Packed链模式: 将所有Views聚拢在一起,控件和控件之间不留间隙,并将聚拢之后的Views居中显示。

Guideline

类 androidx.constraintlayout.widget.Guideline

GuideLine只是用在ConstraintLayout布局里面的一个工具类,用于辅助布局,类似于辅助线,可以设置android:orientation属性来确定是横向还是纵向。

重要的是Guideline是不会显示到界面上的,默认是GONE的。

主要属性:

  • orientation 方向
  • layout_constraintGuide_begin 以View的起始位置为参照物,水平或垂直方向上边界(dp)
  • layout_constraintGuide_end 以View的结束位置为参照物,水平或垂直方向上边界(dp)
  • layout_constraintGuide_percent 水平或垂直方向上的百分比(float ratio 0.0f - 1.0f)

Reference 参考


edgardeng
83 声望3 粉丝