一、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。基本结构如下图所示。

三、布局的介绍:【了解】
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属性:
(一)、类结构:
java.lang.Object
↳ android.view.View
(二)、View及其子元素常用属性:(各种布局及控件的共同属性)
- android:id
- android:background
- android:onClick 为该控件的单击事件绑定监听器
- android:padding 设置控件四周的填充区域
- android:visibility 设置该控件是否可见(invisible/visible/gone)
- android:alpha 设置该组件透明度
- android:layout_height 子组件的布局高度
- android:layout_width 子组件的布局宽度
- android:layout_margin 设置子组件的外边距
五、LinearLayout:【掌握】
(一)、概念:线性布局控制其中的控件或组件横向或纵向排列。不线性布局布局中,每一行或每一列只能放一个控件。并且线性布局不会换行。当控件排列到窗体边缘,后面的控件就被隐藏,而不会显示出来。
线性布局的默认方向是水平方向(Horizontal)。
(二)、
LinearLayout的常用
属性:
1.android:orientation 定义布局内控件或组件的排列方式
可选项:vertical (所有控件竖直摆放)、 horizontal(所有控件水平摆放)
2.android:layout_width 定义控件的宽度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
备注:fill_parent / match_parent的效果完全一致,都是填充整个父控件。但是自2.2版本开始推荐使用match_parent 。wrap_content指的是该控件的宽度正好包裹内容物。
3.android:layout_height 定义控件的高度
可选项:fill_parent / match_parent/ wrap_content/绝对数值
备注:fill_parent / match_parent的效果完全一致,都是高度填充整个父控件。wrap_content指的是该控件的高度正好包裹内容物。
4.android:id 设置控件的id。这样就可以在R.java中自动生成相应的值,在程序中通过findViewById就可以调用。
设置id的格式为:android:id = "@+id/id的名字"
5.android:background 设置控件的背景颜色或背景图片
例如:android:background="#ffffff"
android:background="@drawable/图片名称"
【备注:】
颜色有RGB颜色格式和ARGB格式。G
R
B是红绿蓝三原色。而ARGB是带alpha的三原色,即有透明度的三原色。
#FFFFFF 代表白色
#000000 黑色
#FFFFFFFF 完全不透明
#00FFFFFF 完全透明
#88FFFFFF 半透明
【备注:】
sp、dp、dip、pt、px等单位的区别?
- dpi dpi指像素密度。dots per inch ,即每英寸内像素点的个数。它不是表示长度的单位。在android中认为:低(120dpi),中(160dpi),高(240dpi),超高(320dpi)。随着技术的增长,实际dpi已经超出这个定义范围。
- dip device independent pixels ,即与设备无关的像素。目前这个单位已经被dp所取代,而不建议使用dip。
- dp 与dip的概念一样。不过dp已经取代了dip。在Android中用来表示非文字大小的尺寸。例如:外边距、内填充等。
- sp scale independent pixel ,即与缩放比例无关的像素。在android中常用来表示文字大小。
- px 表示像素。因为同样是200px,但是在不同手机下显示的大小是不同的。
- pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
- sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。
- in(英寸):长度单位。
- mm(毫米):长度单位。
- 总之:dp是用来定义非文字的尺寸,sp用来定义文字大小。px只用于产生一条一像素的分割线时使用。
1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这 这个,不依赖像素。
这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示。在屏幕密度为160的显示屏上,1dip=1px,有时候可能你的屏幕分辨率很大如480*800,但是屏幕密度没有正确设置比如说还是160,那么这个时候凡是使用dip的都会显示异常,基本都是显示过小。
dip的换算:
dip(value)=(int) (px(value)/1.5 + 0.5)
2. dp: 很简单,和dip是一样的。
3. px: pixels(像素),不同的设备不同的显示屏显示效果是相同的,这是绝对像素,是多少就永远是多少不会改变。
4. sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。
备注: 根据google的推荐,像素统一使用dip,字体统一使用sp
6.android:layout_weight 设置控件的权重。即各控件在水平或者垂直方向上平均分配。
备注:如果是水平方向设置权重,要将android:layout_width设置为0dp,如果是垂直方向上使用权重,要将android:layout_height设置为0dp。否则权重容易受到高度或宽度的干扰而出现偏差。
7.android:gravity 该属性用来控制该View的内容物的位置。
如果该属性是定义在布局节点中,则该布局中所有控件的位置都受到这个属性的控制。
如果该属性出现在Button、TextView、EditText等控件中,则用来控制这些控件上的文字的位置。
android:gravity 属性是对该view中内容的限定.比如一个button 上面的text. 你可以设置该text 相对于view的靠左,靠右等位置.
android:layout_gravity是用来设置该view相对与父view 的位置.比如一个button 在linearlayout里,你想把该button放在linearlayout里靠左、靠右等位置就可以通过该属性设置.
即android:gravity用于设置View中内容相对于View组件的对齐方式,而android:layout_gravity用于设置View组件相对于Container的对齐方式。
可选项有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。
【备注:】本属性与android:layout_gravity不同。
8.android:layout_gravity 该属性用于设置控件相对于容器的对齐方式。
可选项有:top、bottom、left、right、center_vertical、fill_vertical 、 center、fill等等。
这些可选项中不是适用于每一种布局。在垂直线性布局中,android:gravity为bottom不起作用;而水平线性布局中,android:gravity为right不起作用。
【备注:】而本属性是android:layout_gravity属性,与 android:gravity 属性不同。
(三)、LinearLayout的特有属性:【重新归纳:去除公共属性后的
特有属性】
1、android:
orientation 布局管理器内组件的排列方式
2、android:
gravity 设置布局管理器内组件的对齐方式
(四)、 LinearLayout 子元素的特有属性:
1、android:
layout_weight 子元素在 LinearLayout 中所占的权重
2、android:
layout_gravity 子元素在 LinearLayout 中的对齐方式
四、Android UI控件及UI组件:
(一)、控件名称:【标红色的为常用的】
- TextView 文本视图
- EditText 文本编辑框
- Button 按钮
- ImageView、Gallery 图像视图、画廊(建议过期)
- ImageButton 图片按钮
- ToggleButton 、Switch 开关按钮、开关
- RadioButton 单选按钮
- CheckBox 多选框
- Spinner 下拉列表
- AutoCompleteTextView 自动完成文本框
- ProgressBar 进度条
- Dialog(AlertDialog、ProgressDialog、TimePickerDialog、DatePickerDialog)提示对话框、进度对话框、时间选择对话框、日期选择对话框
- ListView、GridView 列表视图【最重要的UI组件】、 网格视图
- ExpandableListView 可展开列表视图
- SearchView 搜索框
- TabHost 书签选项卡
- Notification 、Toast 通知 、 吐司(短时提醒)
- Menu(OptionMenu /SubMenu、ContextMenu) 菜单(选项菜单、上下文菜单)
- ImageSwitcher、TextSwitcher 、 ViewPager 图像切换器、文本切换器
- ActionBar 动作导航条
五、基本控件:——TextView:
(一)、TextView类结构:
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
(二)、TextView 常用属性:
1、andorid:
text 设置文本的内容
2、 android:
textColor 设置文本的颜色
3、 android:
textSize 设置文本的字体大小(sp)
4、andorid:height 设置文本的高度,以像素为单位
5、 android:width 设置文本的宽度,以像素为单位
6、 android:
inputType 设置文本的类型。例如是普通文本,还是email,password,数字等等。
7、 android:singleLine 设置文本是否是单行显示。
8、android:
gravity 设置文本框内文本的对齐方式。可选项有:top、bottom、left、right、center、fill、center_vertical、center_horizontal、fill_horizontal等等。这些属性值也可以同时指定,各属性值之间用竖线隔开。例如
right|
bottom
9、android:
drawableLeft 用于在文本框左侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
10、android:drawableRight 用于在文本框左侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
11、android:drawableTop 用于在文本框左侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
12、android:drawableBottom 用于在文本框左侧绘制图片。该属性值通过“@drawable/图片文件名”来设置。
13、android:
autoLink 给指定的文本增加可单击的超链接。可选项为:none、web、email、phone、map和all。
14、android:
hint 设置当文本框内文本内容为空时,默认显示的提示性文字。
【补充:】
1、android:textAllCaps="true" 设置所有字母都大小
2、android:ellipsize="end" 文字过长,设置省略号。可选项:start , end ,middle,marquee
- android:ellipsize="start" 省略号在开头
- android:ellipsize="middle" 省略号在中间
- android:ellipsize="end" 省略号在结尾
- android:ellipsize="marquee" 跑马灯显示
【备注:】要实现跑马灯效果。要同时具有以下属性。
- android:ellipsize="marquee"
- android:singleLine="true"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:marqueeRepeatLimit="marquee_forever"
六、基本控件:——EditText:
(一)、 EditText 类结构:
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.EditText
所以 EditText 继承了TextView的所有属性。
(二)、android:
inputType的可选项:
- android:inputType="textPersonName"
- android:inputType="textPassword"
- android:inputType="numberPassword" 只可以输入数字
- android:inputType="textEmailAddress"
- android:inputType="phone" 只允许输入数字,括号等特殊符号,不可以输入字母。
- android:inputType="textPostalAddress"
- android:inputType="time"
- android:inputType="date"
- android:inputType="number"
(三)、android:imeOptions 设置软键盘的回车键的功能
1. android:imeOptions =“actionSearch” 搜索
2. android:imeOptions =“actionGo” 前往
3. android:imeOptions =“actionNext” 下一个
4.android:imeOptions =“actionDone” 完成
绑定相应的监听如下所示:
(三)、android:imeActionLabel
设置自定义回车键的按钮文本内容
android:imeActionLabel="@string/launch"
(一)、Button类结构:
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.Button
所以Button继承了TextView的所有属性。
Button绑定监听的四种方式
(二)、 button按钮添加监听事件的步骤:
方式一:
1.在<Button>标签中添加OnClick属性 属性的值任意定义 <Button onClick="click">
2.在.java文件中定义与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)设置单击事件监听器
案例代码: