Android day02

LinearLayout 线性布局 以水平和垂直方向排列
RelativeLayout 相对布局 通过相对定位排列
FrameLayout 帧布局 开辟空白区域,帧里的控件(层)叠加
TableLayout 表格布局 表格形式排列
ConstraintLayout 约束布局 可视化的方式编写布局

LinearLayout(线性布局)

属性说明
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 排布方式

横向排列 android:orientation="horizontal"

纵向排列 android:orientation="vertical"

排布方式 gravity

决定子view的排布方式。 gravity 有“重力”的意思,我们引申为子view会向哪个方向靠拢。 gravity有几个选项可以选择,常用的有start,end,left,right,top,bottom。

 

 

 

常量描述
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是一样的。代表的含义也相似。

 

 

分割占比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能消除嵌套视图组并使布局层次结构保持扁平化。

  • 相对于兄弟元素

属性名称属性含义
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可以设置为负数

控件的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的尾边对齐
  • 对齐属性的使用

相对父layout的定位

将子view对齐到父layout的各个边缘位置。

约束的参考对象是 parent 。

 

  • 基线对齐

将一个视图的文本基线与另一视图的文本基线对齐。

可以使用 app:layout_constraintBaseline_toBaselineOf 属性设置基线对齐。

边距属性

属性说明
android:layout_marginStart 起始边距
android:layout_marginEnd 尾边距
android:layout_marginLeft 左边距
android:layout_marginTop 上边距
android:layout_marginRight 右边距
android:layout_marginBottom 底边距

看起来跟别的布局没有什么差别,但实际上控件在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

  • 常用组件的使用

  • 点击事件处理

TextView

TextView (文本框),用于显示文本的一个控件。

TextView的基本使用

  • 文本的字体尺寸单位为 sp

  • 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 识别链接类型 (web, email, phone ,map ,none, all)

文本设置边框

  • 实现原理:

    编写一个ShapeDrawable的资源文件!然后TextView将 background 设置为这个drawable资源即可

  • ShapeDrawable的资源文件

    • <solid android:color="xxx" > 这个是设置背景颜色的

    • <stroke android:width="xdp" android:color="xxx"> 这个是设置边框的粗细,以及边

      框颜色的

    • <padding androidLbottom="xdp"> 这个是设置边距的

    • <corners android:topLeftRadius="10px"> 这个是设置圆角的

    • <gradient> 这个是设置渐变色的,可选属性有: startColor:起始颜色 endColor:结束颜色 centerColor:中间颜色 angle:方向角度,等于0时,从左到右,然后逆时针方向转,当angle = 90度时从下往上 type:设置渐变的类型

  

带图片(drawableXxx)的TextView

 

属性名作用
android:drawableLeft 文本左边设置图片
android:drawableRight 文本右边设置图片
android:drawableBottom 文本下边设置图片
android:drawableTop

文本上边设置图片

 

 

EditText(输入框)

EditText 输入框,集成与TextView, 也继承其属性

EditText的基本使用

EditText 特有属性

属姓名说明
android:hint 默认提示文本
android:textColorHint 默认提示文本的颜色
android:selectAllOnFocus 布尔值。点击输入框获得焦点后,获取到输入框中所有的文本内容
android:inputType 对输入的数据进行限制
android:minLines 设置最小行数
android:maxLines 设置最大行数 PS:当输入内容超过maxline,文字会自动向上滚动!!
android:singleLine 只允许单行输入,而且不会滚动
android:textScaleX 设置字与字的水平间隔
android:textScaleY 设置字与字的垂直间隔
android:capitalize sentences:仅第一个字母大写 ;words:每一个单词首字母大小,用空格区分单词;characters:每一个英文字母都大写

 

设置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的界限
posted @ 2022-07-15 17:08  张帅贝  阅读(71)  评论(0编辑  收藏  举报