Android讲义Word文件下载.docx
《Android讲义Word文件下载.docx》由会员分享,可在线阅读,更多相关《Android讲义Word文件下载.docx(23页珍藏版)》请在冰点文库上搜索。
类似的,为了在资源配置XML文件中引用Android资源,例如,为了引用message_1字符串资源,你可以使用:
@string/message_1
而为了引用图片资源png0237.png资源,你可以使用:
@drawable/png0237
一般的,在Java程序代码中,你可以使用如下格式来引用Android程序资源:
[package.]R.type.name
类似的,在XML资源配置文件中,可以使用如下的格式来引用Android程序资源:
@[package:
]type/name
其中的type对应R.java文件中的资源类型,包括:
Drawable.id.layout.string.attr.plurals.string-array
4、深入分析Activity
4.1、Activity的生命周期
调用Activity的finish()方法onPause()onStop()onDestroy()来结束Activity。
android将重新调用之前被覆盖的Activity的onCreate()onStart()onResume()
若因为资源紧缺而导致Activity被kill,Android系统一定会调用Activity的onSaveInstanceState()方法,当Android系统在恢复一个被Kill的Activity时会调用onRestoreInstanceState()回调函数)。
5.1、使用基于XML的布局
修改res/layout/main.xml:
<
?
xmlversion="
1.0"
encoding="
utf-8"
>
LinearLayoutxmlns:
android="
android:
layout_width="
fill_parent"
layout_height="
orientation="
vertical"
>
<
Buttonxmlns:
android:
id="
@+id/button"
text="
@string/button_text"
/>
/LinearLayout>
同时,修改res/values/strings.xml:
resources>
stringname="
app_name"
5_1_XMLLayout<
/string>
button_text"
点击<
/resources>
在这个文件中,我们定义了button_text引用。
在这个接口中,只有一个方法:
onClick(Viewv)。
为此,我们对XMLLayoutActivity.java程序代码做如下修改:
packageteaching.android.xml_layout_5_1;
importjava.util.Date;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
publicclassXMLLayoutActivityextendsActivity
implementsView.OnClickListener{
Buttonbtn;
/**Calledwhentheactivityisfirstcreated.*/
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn=(Button)this.findViewById(R.id.button);
btn.setOnClickListener(this);
}
publicvoidonClick(Viewv){
//TODOAuto-generatedmethodstub
btn.setText(newDate().toString());
}
XMLLayoutActivity实现了View.OnClickListener接口,同时,我们设置按钮监听点击事件,并在点击事件中修改显示在按钮上的文字为当前的日期时间。
运行该修改后的程序:
5.2、Android基本组件
5.2.1、Button
(1)android:
text
设置在Button上要显示的文字。
可以是一个字符串常量或对一个字符串资源的引用。
(2)android:
textColor
设置显示在Button上的文字的颜色。
可以是对一个颜色资源的引用,或者是这些形式的颜色值:
"
#rgb"
、"
#argb"
#rrggbb"
#aarrggbb"
。
(3)android:
textSize
设置显示在Button上的文字的大小。
可以是一个常数加单位,例如,15px,20sp等,也可以是对单位度量资源的引用。
(4)android:
textStyle
设置显示在Button上的文字的风格,可用的值:
bold,italic,bolditalic。
(5)android:
typeface
设置显示在Button上的文字的字体。
目前Android只支持如下的字体:
normal,sans,serif,monospace。
但是,你可以在程序代码中使用任何你需要的字体。
以上所介绍的这些属性是从android.widget.TextView中继承的,除此之外,你还可以使用从android.view.View中继承的XML配置属性。
下面介绍这些属性。
(6)android:
id
设置Button的id属性以便在程序代码中可以引用该组件。
(7)android:
background
设置Button的背景。
可以是对一个drawable资源的引用,也可以是形如"
的颜色值。
(8)android:
clickable
设置该按钮是否可以响应点击事件。
可选值:
true、false。
(9)android:
onClick
设置按钮被点击时要调用的处理函数。
(10)android:
visibility
设置按钮是否显示在屏幕上。
(11)android:
padding、android:
paddingTop、android:
paddingBottom、android:
paddingLeft、
android:
paddingRight
设置组件的内边界,类似HTML/CSS的padding。
(12)android:
gravity
设置按钮的文字内容在按钮上的显示对齐方式。
可取值:
top、right、left、center等。
Android值支持三种字体:
sans,serif,monospace,默认为sans,
5.2.2、TextView
TextView类似其他GUI的Label,用于显示一个字符串,显示在TextView中的字符串是不可编辑的。
其实,Button组件的XML配置都是从TextView和View中继承来的,因此,TextView的属性与Button组件的XML配置属性是类似的。
5.2.3、ImageView
ImageView组件用于显示一幅图片。
ImageView常用XML配置属性包括:
maxHeight
用于指定组件的最大高度。
maxWidth
用于指定组件的宽度。
scaleType
控制显示在ImageView中的图片应当如何改变大小或移动以适应ImageView组件的大小。
可用的值及其含义:
center:
图片位于视图中间,但不执行缩放;
centerCrop:
按统一比例缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或者大于相应的视图的维度;
centerInside:
按统一比例缩放图片(保持图片的尺寸比例)便于图片的两维(宽度和高度)等于或者小于相应的视图的维度;
fitCenter:
按比例缩放图片达到组件的大小,并使图片居中显示;
fitEnd:
按比例缩放图片达到组件的大小,并使图片居末显示;
fitStart:
按比例缩放图片达到组件的大小,并使图片居前显示;
fitXY:
不按比例缩放图片使之正好达到组件的维数;
matrix:
当绘制时使用图片矩阵缩放;
src
指定显示在组件中的图片。
必须是对一个图片资源的引用。
contentDescription
设定图片的描述性文字。
应用举例。
5.2.4、EditText
EditText是可编辑的文本组件,与TextView组件类似,只是提供了编辑功能。
它的XML配置属性都是从TextView及View中继承来的,如下的几个XML配置属性可能有用:
autoText
设置是否对输入的文字进行自动拼写检查。
只能取值“true”或者“false”。
captalize
设置是否对输入的文字改为大写。
digits
设置是否只能输入数字。
singleLine
设置是否可以输入多行。
hint
设置当输入框为空时,在输入框中显示的提示信息。
inputType
设置放置在EditText组件中的文字类型。
取值包括:
none、text、textCapCharacters、textCapWords、textUri、number等。
举个例子。
5.2.5、CheckBox
CheckBox组件就是在其他GUI组件我们常用的“复选框”,它继承了TextView和View组件的XML属性。
该组件的常用方法:
(1)isChecked()
检查该复选框是否被勾选。
(2)setChecked(Booleanchecked)
设置该复选框的选中状态。
(3)toggle()
将复选框的状态置反。
5.2.6、RadioButton
RadioButton就是我们在其他GUI中使用单选按钮。
一般情况下,我们总是将RadioButton与RadioGroup结合使用:
使得在一组RadioButton中只有一个可以被选中。
通过RadioGroup我们控制RadioButton的选中状态。
常用的RadioGroup的方法:
(1)check(intrb)
检查指定rb的选中状态。
(2)clearCheck()
清除所有RadioButton的选中状态,因此,调用该方法后,没有RadioButton被选中。
(3)getCheckedRadioButtonId()
返回被选中的RadioButton的id,若没有RadioButton被选中,则返回-1。
5.3.1、LinearLayout
LinearLayout是一个Box,即,一个盒子,放置在其中的组件要么按列、要么按行的方式进行顺序布局。
下面介绍LinearLayout的常用XML配置属性。
orientation
设置LinearLayout容器布局组件的方式:
要么按行要么按列。
只能取值:
horizontal、vertical。
设置布局在LinearLayout容器内的组件的对齐方式。
top、bottom、left、right、center、start、end等。
设定该LinearLayout的id,以便可以再程序中引用该容器。
这个属性是从View中继承来的。
(4)其他从View中继承来的属性,包括android:
backgroud、android:
visibility等。
同时,对于布局在LinearLayout中的组件,LinearLayout也提供如下这些XML配置属性,用以告知LinearLayout如何放置这些组件。
这些配置属性是在容器的LinearLayout.LayoutParams配置属性列表中说明的:
点击黄色标注的链接,然后展开“Fromclassandroid.view.ViewGroup.LayoutParams”:
layout_width和android:
layout_height
这两个属性是为放置在LinearLayout容器的组件提供的:
所有放置在LinearLayout中的组件都必须通过android:
layout_height属性来告知LinearLayout如何对组件进行布局。
有三个可选的值:
match_parent/fill_parent----占满父容器的所有空间;
wrap_content----组件将只占用为了正确显示器内容所需的空间;
一个常数值和单位,例如,100px,表示该组件占用100个像素宽。
可用的单位:
px(像素):
屏幕上的点。
in(英寸):
长度单位。
mm(毫米):
pt(磅):
1/72英寸。
dp(与密度无关的像素):
一种基于屏幕密度的抽象单位。
在每英寸160点的显示器上,1dp=1px。
dip:
与dp相同,多用于Google示例中。
sp(与刻度无关的像素):
与dp类似,但是可以根据用户的字体大小首选项进行缩放。
layout_gravity
设置组件在容器中的布局方式。
layout_weight
设置组件占用容器的空余显示空间的比例。
layout_margin、android:
layout_marginTop、android:
layout_marginBottom、
layout_marginLeft、android:
layout_marginRight
设置组件的外边界,类似于HTML/CSS中的margin。
5.3.2、RelativeLayout
RelativeLayout,顾名思义,就是相对布局:
一个组件相对于另一个组件的位置来布局组件。
例如,将组件A布局在组件B的右下方。
RelativeLayout为布局在其中的组件提供了如下的XML布局属性,其含义是不言而喻的:
5.3.3、TableLayout
TableLayout很像HTML中的Table标签,用于按行和列的方式来布局组件。
TableLayout与TableRow组件协同工作来完成对组件的布局。
TableLayout的XML配置属性:
其中:
collapseColumns,指定要隐藏的列,以0为起始,多个列用“,”分隔;
shrinkColumns,指定当列空间不够时,自动缩小的列,以0为起始,多个列用“,”分隔;
stretchColumns,指定当列空间有多余时,自动延展的列,以0为起始,多个列用“,”分隔。
对于布局在TableLayout中的组件,更准确的说是布局在TableRow中的组件,可以使用如下的由TableRow.LayoutParams提供的XML配置属性进行配置:
其中,android:
layout_column指定组件在TableRow中的列位置;
layout_span指定组件占用几列。
5.3.4、FrameLayout
FrameLayout以层叠的方式的布局组件:
每次只能显示其中一个。
这有点类似扑克牌,你只能看到最上面的那张。
FrameLayout为布局在其中的组件提供了一个XML配置属性:
用以设置FrameLayout容器中的组件的对齐方式。
5.3.5、ScrollView
ScrollView也是一个容器,它是FrameLayout的子类,它的主要作用是可以包括多余屏幕可以显示的内容,ScrollView将提供垂直滚动。
ScrollView提供了如下的XML配置属性:
6、理解和使用Intent
在基于HTML的页面程序中,我们使用“超链接”来实现页面之间的跳转。
之前我们也提到过,Android应用程序界面是由一个到多个Activity组成的,一个Activity相当于HTML的一个页面,那么,当一个Android应用程序具有多个有相互联系的Activity时,它们之间如何实现跳转呢?
这就是通过使用我们在这里将要介绍的Intent来实现的。
6.1、Intent应用入门
6.1.1、Intent入门例子
6.1.2、课堂练习
编写与例子相似的、能通过Intent打开新的Activity的程序。
6.2、细说Intent
可以指明的条件包括:
action、data和category。
6.2.1、Intent的action
我们可以为我们自己创建的Activity定义一个用于打开这个Activity的action,这个action是一个字符串常量,你可以任意定义,但是,Android建议的做法是,在命名action是,采用“Java包名+特定串”的形式来命名action。
例如,我们为Intent_02_Activity定义的action:
teaching.android.chapter6.intent_01.A1,其中,teaching.android.chapter6.intent_01是包名,而A1是特定的名称。
需要强调的是,Activity与action不一定是1对1的对应关系,也就是说,可能多个Activity对应同名的action,这在Android中是允许的,当这种情况出现时:
Android平台将弹出一个对话框,让你选择满足条件的哪个Activity来运行。
Android平台的Intent类已经预先定义了一些action:
其中的每个action都有确定的含义,例如,ACTION_MAIN的含义:
它表示包含这个action的Activity是android应用程序的入口Activity,也就是,当运行某个Android应用程序时,当首先打开包含这个action的Activity。
这些action可以用来打开系统已经包含的一些Activity,例如,电话拨号Activity。
当然,你也可以在程序程序直接使用这些action作为你的Activity的action。
为了指明一个Intent的action,有两种方式:
(1)通过Intent类的构造函数newIntent(Stringaction)及newIntent(Stringaction,URIuri)。
(2)通过Intent类的setAction(Stringaction)函数。
6.2.2、Intent的data
在通过隐式Intent打开Activity时,除了指明Activity的action外,我们经常还指明Activity所支持的data。
就像在HTML中那样,我们除了指明是GET、PUT、POST动作外,还经常需要指明页面的URI地址。
在Android中,我们通过Intent的data指明要操作的数据,Android的data也是通过URI来指明的。
URI的标准形式:
scheme:
//host:
port/path或者
port/pathPattern或者
port/pathPrefix
例如,在如下的URI中:
content:
//com.example.project:
200/folder/subfolder/etc
scheme为"
content"
,host为"
com.example.project"
,port为"
200"
,path为"
folder/subfolder/etc"
通过<
activity>
标签的子标签<
intent-filter>
的<
data>
子标签,我们可以指定某个Activity的data属性,其中包括:
host、mimeType、path、pathPattern、pathP