start和left,end和right并不一定是同样的效果。 对于RTL(right to left)类型的手机,比如某些阿拉伯文的系统。start是从右到左的。 我们日常生活中很少见到RTL,一般都是LTR。但还是建议多用start而不是left。
gravity可以同时设置多个值,用或符号 | 来连接。比如android:gravity="end|center_vertical" 。
子 view 的 layout_gravity
layout_gravity看起来和gravity有些相似。
android:gravity 控制自己内部的子元素。
android:layout_gravity 是告诉父元素自己的位置。
取值范围和gravity是一样的。代表的含义也相似。
分割占比layout_weight
可以在设置子view的layout_weight,来确定空间占比。 设置 layout_weight 的时候,一般要设置layout_width="0dp" 。
分割占比之和 weightSum
android:weightSum 定义子view的weight之和的最大值。如果不直接指定,它会是所有子view的layout_weight 之和。 如果想给单独的一个子view一半的空间占比,可以设置子view的layout_weight为0.5,并且设置LinearLayout的weightSum为1.0。取值可以是浮点数,比如 9.3 。
分割线 divider
设置divider与showDividers属性。
android:divider="@drawable/divider_linear_1"
android:showDividers="middle"
直接给divider设置颜色是无效的。
在drawable目录里新建一个xml,叫做 divider_linear_1.xml 。
size必须指定,否则当做divider来用时会显示不出来。
LinearLayout设置divider。
showDividers有几种可选
middle 中间的分割线
beginning 开始的分割线
end 结束的分割线
none 没有分割线
RelativeLayout 相对布局
RelativeLayout和LinearLayout类似,都是ViewGroup,能“容纳”多个子view。 RelativeLayout 是一个以相对位置显示子视图的视图组。每个视图的位置可以指定为相对于同级元素的位置(例如,在另一个视图的左侧或下方)或相对于父级 RelativeLayout 区域的位置(例如在底部、左侧或中心对齐)。
子view可以是TextView,Button,或者是LinearLayout,RelativeLayout等等。 如果不添加其他配置它们默认是在RelativeLayout的左上角。 在RelativeLayout中,子View可以根据另一个子View来确定位置。 但必须注意的是,RelativeLayout和它的子View不能互相依赖。比如RelativeLayout设置高度为wrap_content,子View设置了ALIGN_PARENT_BOTTOM,这样你会发现RelativeLayout被撑到最大。RelativeLayout能消除嵌套视图组并使布局层次结构保持扁平化。
相对于兄弟元素
margin与padding的区别
首先margin代表的是偏移,比如marginleft = "5dp"表示组件离容器左边缘偏移5dp; 而padding代表的则是填充,而填充的对象针对的是组件中的元素,比如TextView中的文字 比如为TextView设置paddingleft = "5dp",则是在组件里的元素的左边填充5dp的空间! margin针对的是容器中的组件,而padding针对的是组件中的元素,要区分开来!
margin可以设置为负数
控件的margin属性是用来控制控件之间的间距,那么当两个控件需要重叠时该如何进行布局呢?下面写个简单的程序演示下吧,模拟进入软件后,弹出广告 页面的,右上角的cancle按钮的margin则是使用负数的!
TableLayout(表格布局)
TableLayout
是线性布局
LinearLayout
的子类,属于线性布局的一个扩展,也就是说
TableLayout
本质上就是一个线性布局。
概述:表格布局是以行数和列数来确定位置进行排列。就像一间教室,确定好行数与列数就能让同学有序入座。
注意
:我们需要先添加
<TableRow>
容器,每添加一个就会多一行,然后再往
<TableRow
>容器中添加其它组件。
在TableLayout中,可以设置三种属性:
属性
解释
android:collapseColumns
设置需要被隐藏的列的序号
android:shrinkColumns
设置允许被收缩的列的列序号
android:stretchColumns
设置运行被拉伸的列的列序号
以上这三个属性的列号都是从0开始算的,比如shrinkColunmns = “2”,对应的是第三列.
内部控件属性
属性
解释
android:layout_column
该单元格在第几列显示
android:layout_span
该单元格占据列数,默认为1
FrameLayout(帧布局)
FrameLayout 应该说是 Android 常用UI布局里面最简单的一种,顾名思义,它的布局方式就是将 View 一帧一帧的叠加到一起,有点类似 Photoshop 里面的图层的概念。在学习 FrameLayout 的过程中,你会发现基于它可以设计出很多有意思的 Android UI。那么接下来,我们来一起一探究竟。
FrameLayout 是
最简单且最高效
的布局形式,不过 FrameLayout 的使用频率相比其他的 Layout 来讲要更少很多,主要是因为很多时候它只是作为一个容器来显示单个 View 或者多个 View 重叠的场景。
FrameLayout的属性很少就两个,但是在说之前我们先介绍一个东西:
前景图像:永远处于帧布局最上面,直接面对用户的图像,就是不会被覆盖的图片。
两个属性:
android:foreground:
*
设置改帧布局容器的前景图像
android:foregroundGravity:
设置前景图像显示的位置
属性的使用
android:foreground:
设置 FrameLayout 的前景图像
前景图像会置于 FrameLayout 内部所有 View 的层级之上,
直接设置图片的资源 id 即可
ConstraintLayout(约束布局)
ConstraintLayout 可让您使用扁平视图层次结构(无嵌套视图组)创建复杂的大型布局。它与RelativeLayout 相似,其中所有的视图均根据同级视图与父布局之间的关系进行布局,但其灵活性要高于 RelativeLayout,并且更易于与 Android Studio 的布局编辑器配合使用。
创建约束条件时,请注意以下规则: - 每个视图都必须至少有两个约束条件:一个水平约束条件,一个垂直约束条件。
只能在共用同一平面的约束手柄与定位点之间创建约束条件。因此,视图的垂直平面(左侧和右侧)只能约束在另一个垂直平面上;而基准线则只能约束到其他基准线上。
每个约束句柄只能用于一个约束条件,但您可以在同一定位点上创建多个约束条件(从不同的视图)。
相对定位关系(对齐)的属性
属性
说明
layout_constraintLeft_toLeftOf
该控件的左边与设置值id的左边对齐
layout_constraintLeft_toRightOf
该控件的左边与设置值id的右边对齐
layout_constraintRight_toLeftOf
该控件的右边与设置值id的左边对齐
layout_constraintRight_toRightOf
该控件的右边与设置值id的右边对齐
layout_constraintTop_toTopOf
该控件的上边与设置值id的上边对齐
layout_constraintTop_toBottomOf
该控件的上边与设置值id的下边对齐
layout_constraintBottom_toTopOf
该控件的底边与设置值id的上边对齐
layout_constraintBottom_toBottomOf
该控件的底边与设置值id的底边对齐
layout_constraintBaseline_toBaselineOf
控件间的文本内容基准线对齐
layout_constraintStart_toEndOf
该控件的起始边与设置值id的尾边对齐
layout_constraintStart_toStartOf
该控件的起始边与设置值id的起始边对齐
layout_constraintEnd_toStartOf
该控件的尾边与设置值id的起始边对齐
layout_constraintEnd_toEndOf
该控件的尾边与设置值id的尾边对齐
看起来跟别的布局没有什么差别,但实际上控件在ConstraintLayout里面要实现margin,必须先约束该控件在ConstraintLayout里的位置
引导线约束 Guideline
在ConstraintLayout中添加引导线,可以方便定位。其他View可以引导线作为参考位置。
添加Guideline,需要确定它的方向,分别是垂直和水平。
android:orientation="vertical"
android:orientation="horizontal"
这里按比例来定位,使用 app:layout_constraintGuide_percent 。 需要指定比例值,例如
app:layout_constraintGuide_percent="0.5" 。
TextView
EditText
ImageView
Button
设置EditText获得焦点,同时弹出小键盘
edit.requestFocus(); //请求获取焦点
edit.clearFocus(); //清除焦点
低版本的系统直接requestFocus就会自动弹出小键盘了
稍微高一点的版本则需要我们手动地去弹键盘:
第一种:
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
第二种 :
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //强制隐藏键盘
EditText光标位置的控制
setSelection();//一个参数的是设置光标位置的,两个参数的是设置起始位置与结束位置的中间括的部分,即部分选中
ImageView(图像视图)
ImageView
见名知意,就是用来显示图像的一个View或者说控件
ImageView的基本使用
ImageView的常用属性
属性名
说明
android:src
设置图片资源
android:scaleType
设置图片缩放类型
android:maxHeight
android:maxWidth
android:adjustViewBounds
调整View的界限