day2-UI布局
一、Android UI框架:【了解】
Android中所有的UI(用户界面)元素都是使用View和ViewGroup对
象建立的,View是一个可以将一些信息绘制在屏幕上并与用户产生交互的
对象,而ViewGroup是一个包含多个的View和ViewGroup的容器,用来定
义UI布局。
Android提供了一系列的View和ViewGroup的子类,开发者可以灵活地
组合使用它们来完成界面布局、界面元素绘制和用户交互等工作,同时,开
发者还可以选择性地继承一些系统提供的View,来自定义View,把自己定
义的界面元素显示给用户。
Android使用View类作为界面开发的超类,所有的界面开发都与View
有关。多个View是一个ViewGroup,但ViewGroup本身继承自View,所以,
Android界面由View和ViewGroup随意组合而成,Android的界面开发其实
就是对View及其各种子孙类做操作。
二、View和ViewGroup
Android的UI开发使用层次模型来完成,一般都是在一个ViewGroup中
嵌套多层ViewGroup,每一层中含有随意数目的View。我们可以将整个屏幕
看做一个ViewGroup,它同时也是一个View,而在这个整体的ViewGroup
之中,又有多个ViewGroup和View,每个ViewGroup中又可以有多个子
ViewGroup和View。基本结构如下图所示。
三、布局的介绍:【了解】
对界面控件位置的确定
注意:如果需要定义layout/xx.xml文件时必须指定当前文件的根布局 选择布局需要根据界面控件的摆放特征
例如:如果需要所有的控件都在同一方向上今夕摆放需要使用<LineareLayout> 线性布局
1、在4.0以前版本中一共有五种布局,都是ViewGroup的子类。分别是AbsoluteLayout(绝对布局)、 RelativeLayout(相对布局)、
LinearLayout(线性布局)、 FrameLayout(帧布局)、
TableLayout(表格布局)。而TableLayout是LinearLayout的子类。。
2、在2.2操作系统中将AbsoluteLayout过期。而目前FrameLayout、TableLayout
也逐渐少用。
3、在4.0之后又新增GridLayout。(GridLayout最经典的案例是计算器界面)
总之,Android中一共有六种布局。目前推荐使用RelativeLayout、LinearLayout、GridLayout三种布局。
四、View类的常用xml属性:
1、类结构:
java.lang.Object
↳android.view.View
2、View及其子元素常用属性:(各种布局及控件的共同属性)
android:id 控件的id
android:background 控件的背景颜色
android:onClick 为该控件的单击事件绑定监听器
android:visibility 设置该控件是否可见(invisible/visible/gone)
android:alpha 设置该组件透明度
android:layout_height 子组件的布局高度
android:layout_width 子组件的布局宽度
android:layout_margin 设置控件与控件之间或者是控件与布局之间的间距
android:layout_marginLeft 左
android:layout_marginRight 右
android:layout_marginTop 上
android:layout_marginBottom 下
android:padding 填充 设置控件的边框与内容的距离
android:paddingLeft 左
android:paddingRight 右
android:paddingTop 上
android:paddingBottom 下
五、LinearLayout:【掌握】
1、概念:线性布局控制其中的控件或组件横向或纵向排列。不线性布局布局中,每一行或每一列只能放一个控件。并且线性布局不会换行。当控件排列到窗体边缘,后面的控件就被隐藏,而不会显示出来。
线性布局的默认方向是水平方向(Horizontal)。
2、LinearLayout的常用属性:
1、android:orientation表示指定当前现形布局中的控件的摆放方
horizontal 水平摆放 表示布局中每个控件都单独的占据一列
vertical 竖直摆放 表示布局中的每个控件淡定占据一行
2、android:layout_width 定义控件的宽度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
【备注】:fill_parent / match_parent的效果完全一致,都是填充整个父控件。但是自2.2版本开始推荐使用match_parent 。
wrap_content 包裹内容 指的是当前控件或者是布局与控件中的内容或者布局中的内容大小一致
match_parent 填充 指的是当前控件填充功夫不惧的尺寸 当前的
布局填充手机屏幕
fill_parent 含义同match_parent 4.0之前使用
3、android:layout_height 定义控件的高度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
与android:layout_width相同
4、android:id 设置控件的id。这样就可以在R.java中自动生成相应的值,在程序中通过findViewById就可以调用。
设置id的格式为:android:id = "@+id/id的名字"
5、android:background 设置控件的背景颜色或背景图片
例如:android:background="#ffffff"
android:background="@drawable/图片名称"
【备注:】颜色有RGB(red green blue)颜色格式和ARGB格式。GRB是红绿蓝三原色。而ARGB是带alpha的三原色,即有透明度的三原色。
6、android:gravity 该属性用来控制该View的内容物的位置。
a、如果该属性是定义在布局节点中,则该布局中所有控件的位置都受到这个属性的控制。
b、如果该属性出现在Button、TextView、EditText等控件中,则用来控制这些控件上的文字的位置。
7、android:layout_gravity 定义在控件中表示控件相对父布局的位置
可选项有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。
注意:这些可选项中不是适用于每一种布局。在垂直线性布局中,android:gravity为bottom不起作用;而水平线性布局中,android:gravity为right不起作用。
8、android:layout_weight 表示控件占据剩余空间的比例
如果线性布局竖直摆放并且需要均分竖直方向
方式一:
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
方式二:
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
如果线性布局水平摆放并且需要均分水平方向
方式一:
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
方式二:
android:orientation="horizontal" >
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
注意:
1、LinearLayout的特有属性:【重新归纳:去除公共属性后的特有属性】
a、android:orientation 布局管理器内组件的排列方式
b、android:gravity 设置布局管理器内组件的对齐方式
2、LinearLayout 子元素的特有属性:
a、android:layout_weight 子元素在 LinearLayout 中所占的权重
b、android:layout_gravity 子元素在 LinearLayout 中的对齐方式
五、基本控件---- TextView
TextView类结构:
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
六、TextView控件
1、andorid:text 设置文本的内容
2、android:textColor 设置文本的颜色
3、android:textSize 设置文本的字体大小(sp)
4、android:textStyle 设置字体样式 默认是normal 如果需要设置两个需要 | 隔开 bold|italic
5、android:background 设置背景色
6、android:layout_height 设置文本的高度,以像素为单位
7、android:layout_width 设置文本的宽度,以像素为单位
8、android:inputType 设置文本的类型。
例如:普通文本,email,password,数字等等。
9、android:lines 设置文本框的行数
10、android:singleLine 设置文本是否是单行显示。如果为true表示单行显示
11、android:gravity 设置文本框内文本的对齐方式。
可选项有:top、bottom、left、right、center、fill、center_vertical、center_horizontal、fill_horizontal等等。这些属性值也可以同时指定,各属性值之间用竖线隔开。例如right|bottom
12、android:drawableLeft 用于在文本框左侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
13、android:drawableRight 用于在文本框右侧绘制图片。该属性值通过
“@drawable/图片文件名”来设置。
14、android:drawableTop 用于在文本框上侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
15、android:drawableBottom 用于在文本框下侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
16、android:autoLink 根据指定的链接的类型自动添加链接
可选项为:none、web、email、phone、map和all。
17、android:hint 设置当文本框内文本内容为空时,默认显示的提示性文字。
18、android:ellipsize 设置当前省略的位置
【补充:】
1、android:textAllCaps="true" 设置所有字母都大小
2、android:ellipsize="end" 文字过长,设置省略号在结尾。
可选项:start , end ,middle,marquee
【备注:】要实现跑马灯效果。要同时具有以下属性。
android:ellipsize="marquee"
android:singleLine="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:marqueeRepeatLimit="marquee_forever"
七、EidtTest控件
1、android:hint 设置文本编辑框输入的提示信息
2、android:maxLenght 设置当前文本编辑框输入的最大的输入数目
4、android:password 设置密码框
5、android:inputType设置当前的编辑框的输入类型 通过限制软件盘的类型限制编辑框的输入类型
可选项:textPersonName textPassword numberPassword
textEmailAddress phone textPostalAddress time
date number
6、android:imeOptions 指定软件盘的回车键变成相应的功能键
可选项:actionNext(下一个) actionSend(发送) actionGo(前往)
actionSearch(搜索) actionDone (完成) number(数字)
7、android:imeActionLable 指定按钮中展示的文本内容
例如:android:imeActionLabel="@string/launch"
八、Button按钮
1、android:background=”@null” 去掉按钮图片的背景
2、android:drawableTop 在按钮的上方设置指定的图片
3、android:drawableButtom 在按钮的上方设置指定的图片
4、android:drawableLeft 在按钮的上方设置指定的图片
5、android:drawableRight 在按钮的上方设置指定的图片
给button按钮添加单击事件
方式一:
1、在Button按钮所在的xml布局文件中的<Button>标签中添
加OnClick属性 并指定属性值 如:<Button onClick="click">
2、在加载Button按钮的activity中需要定义与OnClick属性的值同名
的方法 public void click(View v){}
方法的特点:
1)访问修饰符必须是public
2)返回值必须是void
3)方法的参数必须是唯一的View类型
4)方法名必须和OnClick的属性值完全相同
3、将点击按钮进行的操作放到当前方法中做
多个按钮的处理事件
方式二:
1.在<Button>标签当中添加id属性 <Button id="@+id/btn">
2..java文件中通过findviewById()获取当前的按钮对象
3.通过Button按钮对象setOnClickListener()设置单击事件监听器
监听器需要OnClickListener接口类型的对象 可以声明内部类实现这个接口重写OnClick()方法
当点击按钮时会回调OnClickListener的OnClick()方法
案例代码:
方式三:
1、在<Button>标签当中添加id属性 <Button id="@+id/btn">
2、.java文件中通过findviewById()获取当前的按钮对象
3、通过Button按钮对象setOnClickListener()设置单击事件监听器 采用匿名内部类的形式
案例代码:
方式四:
1、在<Button>标签当中添加id属性 <Button id="@+id/btn">
2、.java文件中通过findviewById()获取当前的按钮对象
3、当前的activity实现OnClickListener接口 重写OnClick()方法
4、按钮对象的setOnClickListener(this)设置单击事件监听器
案例代码: