五大布局
通用属性
paddingBottom 内容与本控件底部的距离
paddingLeft 左
paddingRight 右
paddingTop 顶
padding 外
LinearLayout(线性布局)
orientation 方向
gravity 本控件中内容居中
layout_gravity 本控件在父控件中居中
layout_weight 权重
visibility 是否可见
RelativeLayout(相对布局)
相对于父组件
layout_alignParentTop 与父控件顶部对其
layout_alignParentBottom 底部
layout_alignParentLeft 左边
layout_alignParentRight 右边
layout_alignParentStart
layout_alignParentEnd
layout_marginTop 与其他控件上边缘距离
layout_marginBottom 下
layout_marginLeft 左
layout_marginRight 右
layout_centerHorizontal 水平居中
layout_centerVertical 垂直居中
layout_centerInParent 正中
相对于其他组件(指定id)
layout_above 本控件底部与给定ID控件顶部对其
layout_below 顶 底
layout_toLeftOf 右 左
layout_toRightOf 左 右
layout_alignBaseline baseLine baseLine
layout_alignTop 顶 顶
layout_alignBottom 底 底
layout_alignLeft 左 左
layout_alignRight 右 右
FrameLayout(帧布局)
TableLayout(表格布局)GridLayout 网格布局
AbsoluteLayout(绝对布局)
ConstaintLayout(约束布局)
AS:Android Studio 2.2及以上
安装:Android SDK -> SDK Tools -> Support Repository中的ConstrainLayout for Android和Solver for ConstaintLayout
build.gradle中添加 compile ‘com.android.support.constraint:constraint-layout:1.0.0-beta4’
可能优化布局
Android Lint(工具)
使用组合控件
合并作为根节点的帧布局(Framelayout)
无用的叶子节点
无用的父节点
过深的布局层次
问题
Android 5.0及以上,Relativelayout布局中Button始终在顶层无法被覆盖?
原因:Android5.0推出的stateListAnimator属性,其用来实现控件在点击时产生不同的交互。对于Button控件,点击时默认有个阴影的效果用于表示按下的状态(5.0以前就是简单的变色)。
解决方法:
1、自定义样式中设置android:stateListAnimator=”@null”,去掉阴影效果而使Button可以被正常的覆盖
2、如希望Button的阴影效果和被覆盖都能实现,可以使用两个单独的Linearlayout对Button进行包裹,同时给Button的下方和左右侧留出空余,如下面所示
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp">
<Button
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:text="@string/app_name"/>
</LinearLayout>