Android day02
线性布局 | 以水平和垂直方向排列 | |
RelativeLayout | 相对布局 | 通过相对定位排列 |
FrameLayout | 帧布局 | 开辟空白区域,帧里的控件(层)叠加 |
TableLayout | 表格布局 | 表格形式排列 |
ConstraintLayout | 约束布局 |
说明 | |
---|---|
android:id | 唯一值 |
android:layout_height | 高,wrap_content:(随内容变化,类似auto),match_parent:(同父元素一样)单元最好是:dp |
android:layout_width | 宽,同上 |
android:background | 背景色 |
android:layout_margin | 外边距 |
android:layout_padding | 内边距 |
android:orientation | horizontal水平排列(默认);vertical竖直排列 |
android:layout_weight | 权重 |
android:gravity |
描述 | |
---|---|
top | 把view推到容器里的顶部。不会改变view的尺寸。 |
bottom | 把view推到容器的底部。不会改变view的尺寸。 |
center | 子view水平与竖直都居中。不会改变view的尺寸。 |
center_horizonta | 子view水平居中。不会改变view的尺寸。 |
center_vertical | 子view垂直居中。不会改变view的尺寸。 |
start | 把view推到容器里最开始的地方。不会改变view的尺寸。 |
end | 把子view放到容器的最尾部。不改变view的尺寸。 |
left | 子view从容器的左边开始排布。不会改变view的尺寸。 |
right | 子view从容器的右边开始排布。不会改变view的尺寸。 |
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是一样的。代表的含义也相似。
分割占比之和 weightSum
分割线 divider
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能消除嵌套视图组并使布局层次结构保持扁平化。
属性名称 | 属性含义 |
---|---|
android:layout_below="@id/aaa" | 在指定View的下方 |
android:layout_above="@id/aaa" | 在指定View的上方 |
android:layout_toLeftOf="@id/aaa" | 在指定View的左边 |
android:layout_toRightOf="@id/aaa" | 在指定View的右边 |
android:layout_alignTop="@id/aaa" | 与指定View的上边界一致 |
android:layout_alignBottom="@id/aaa" | 与指定View下边界一致 |
android:layout_alignLeft="@id/aaa" | 与指定View的左边界一致 |
android:layout_alignRight="@id/aaa" | 与指定View的右边界一致 |
-
相对于父元素
属性名称 | 属性含义 |
---|---|
android:layout_alignParentLeft="true" | 在父元素内左边 |
android:layout_alignParentRight="true" | 在父元素内右边 |
android:layout_alignParentTop="true" | 在父元素内顶部 |
android:layout_alignParentBottom="true" | 在父元素内底部 |
-
对齐方式
属性名称 | 属性含义 |
---|---|
android:layout_centerInParent="true" | 居中布局 |
android:layout_centerVertical="true" | 垂直居中布局 |
android:layout_centerHorizontal="true" | 水平居中布局 |
-
间隔
属性名称 | 属性含义 |
---|---|
android:layout_marginBottom="" | 离某元素底边缘的距离 |
android:layout_marginLeft="" | 离某元素左边缘的距离 |
android:layout_marginRight ="" | 离某元素右边缘的距离 |
android:layout_marginTop="" | 离某元素上边缘的距离 |
android:layout_paddingBottom="" | 往内部元素底边缘填充距离 |
android:layout_paddingLeft="" | 往内部元素左边缘填充距离 |
android:layout_paddingRight ="" | 往内部元素右边缘填充距离 |
android:layout_paddingTop="" | 往内部元素右边缘填充距离 |
margin与padding的区别
首先margin代表的是偏移,比如marginleft = "5dp"表示组件离容器左边缘偏移5dp; 而padding代表的则是填充,而填充的对象针对的是组件中的元素,比如TextView中的文字 比如为TextView设置paddingleft = "5dp",则是在组件里的元素的左边填充5dp的空间! margin针对的是容器中的组件,而padding针对的是组件中的元素,要区分开来!
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的属性很少就两个,但是在说之前我们先介绍一个东西:
前景图像:永远处于帧布局最上面,直接面对用户的图像,就是不会被覆盖的图片。
两个属性:
-
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的尾边对齐 |
-
对齐属性的使用
相对父layout的定位
将子view对齐到父layout的各个边缘位置。
约束的参考对象是 parent 。
将一个视图的文本基线与另一视图的文本基线对齐。
可以使用 app:layout_constraintBaseline_toBaselineOf 属性设置基线对齐。
属性 | 说明 |
---|---|
起始边距 | |
android:layout_marginEnd | 尾边距 |
android:layout_marginLeft | 左边距 |
android:layout_marginTop | 上边距 |
android:layout_marginRight | 右边距 |
android:layout_marginBottom | 底边距 |
看起来跟别的布局没有什么差别,但实际上控件在ConstraintLayout里面要实现margin,必须先约束该控件在ConstraintLayout里的位置
引导线约束 Guideline
在ConstraintLayout中添加引导线,可以方便定位。其他View可以引导线作为参考位置。
android:orientation="vertical"
android:orientation="horizontal"
-
比例定位
这里按比例来定位,使用 app:layout_constraintGuide_percent 。 需要指定比例值,例如
app:layout_constraintGuide_percent="0.5" 。
-
-
EditText
-
ImageView
-
-
-
sp: scaled pixels(放大像素)
属性名 | 作用 |
---|---|
id | 为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行相关属性的设置 |
layout_width | 组件的宽度 |
layout_height | 组件的高度 |
gravity | 设置控件中内容的对齐方向,TextView中是文字,ImageView中是图片等等 |
text | 设置显示的文本内容,一般我们是把字符串写到string.xml文件中,然后通过@String/xxx取得对应的字符串内容的 |
textColor | 设置字体颜色,同上,通过colors.xml资源来引用 |
textStyle | 设置字体风格,三个可选值:normal(无效果),bold(加粗),italic(斜体) |
textSize | 字体大小,单位一般是用sp |
background | 控件的背景颜色,可以理解为填充整个控件的颜色,可以是图片 |
autoLink |
-
编写一个ShapeDrawable的资源文件!然后TextView将 background 设置为这个drawable资源即可
-
ShapeDrawable的资源文件
-
<solid android:color="xxx" > 这个是设置背景颜色的
-
<stroke android:width="xdp" android:color="xxx"> 这个是设置边框的粗细,以及边
框颜色的
-
<padding androidLbottom="xdp"> 这个是设置边距的
-
<corners android:topLeftRadius="10px"> 这个是设置圆角的
-
<gradient>
作用 | |
---|---|
android:drawableLeft | 文本左边设置图片 |
android:drawableRight | 文本右边设置图片 |
android:drawableBottom | 文本下边设置图片 |
android:drawableTop |
|
属姓名 | 说明 |
---|---|
android:hint | 默认提示文本 |
android:textColorHint | 默认提示文本的颜色 |
android:selectAllOnFocus | 布尔值。点击输入框获得焦点后,获取到输入框中所有的文本内容 |
android:inputType | 对输入的数据进行限制 |
android:minLines | 设置最小行数 |
android:maxLines | 设置最大行数 PS:当输入内容超过maxline,文字会自动向上滚动!! |
android:singleLine | 只允许单行输入,而且不会滚动 |
android:textScaleX | 设置字与字的水平间隔 |
android:textScaleY | 设置字与字的垂直间隔 |
android:capitalize |
edit.requestFocus(); //请求获取焦点
edit.clearFocus(); //清除焦点
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); //强制隐藏键盘
说明 | |
---|---|
android:src | 设置图片资源 |
android:scaleType | 设置图片缩放类型 |
android:maxHeight | 最大高度 |
android:maxWidth | 最大宽度 |
android:adjustViewBounds |