一、Android体系结构
1、应用程序层
2、应用程序框架层
3、系统运行库层
4、Linux核心层
二、Android项目结构
1、目录
src:存放Java源程序,可以有多个包和类,Activity子类就是在这个目录下实现的
bin:存放编译后的Java类文件、相关资源文件,以及打包后得到的.apk安装文件
res:存放相关资源文件如图片、布局文件、数据文件等,其中:
layout:存放界面布局文件
drawable-XXX:存放@图片动画资源
values:存放常量、字符串、尺寸、样式
gen:存放系统自动生成的Java文件,包含了多个内部类,对应drawable、layout、values等资源文件,在Activity子类中可通 过findViewById(R.id.XXX)形式获取组件
assets:存放相关辅助文件
2、文件
AndroidManifest.xml:Android应用程序最基本最重要的全局配置文件,它保存应用程序中的Activity、Intent、Service等组件,以及应用程序权限声明等信息。
三、Activity生命周期
1、Activity是什么?
Acticity是Android系统API的一个类,用于提供系统与用户交互的机制。Android程序中凡是涉及到需要与用户交互的部分,都要创建一个类,继承自Activity类,通常一个Activity子类对应一个用户视图。
2、Activity状态
started:Activity启动,入栈,但界面未显示
running:界面显示,获取用户输入焦点
paused:界面被遮挡,但仍可见,失去用户输入焦点
stopped:界面被其他Activity界面覆盖,不可见,但仍存活(可通过onRestart()方法重新显示)
exited:Activity出栈,停止运行
3、Activity生命周期方法
onCreate():Activity启动时调用,进入started状态
onStart():界面显示时调用,进入running状态
onResume():获取用书输入焦点,属于running状态
onPause():界面被遮挡时调用,进入paused状态
onStop():界面被覆盖时调用,进入stopped状态
onRestart():Activity从stopped状态中恢复成running状态时调用,使界面重新显示
onDestory():Activity停止运行被释放时调用,进入exited状态
四、Android组件知识点
1、文本框<TextView/>
<TextView android:id="@+id/XXX" //设置id唯一标识
android:layout_width="match_parent" //宽度填满父元素
android:layout_height="wrap_content" //高度适应文字
android:layout_gravity="center" //设置文字居中,right为右对齐,left为左对齐
android:text="XXXXX" //设置文字内容,可以使用@string/name引用string.xml中内容
android:textSize="XXpx" //设置文字大小
/>
<TextView android:id="@+id/XXX"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@drawable/name" //设置带图片的文本框,图片在文本上面,下面drawableBottom
android:text="@string/name" />
其他:
设置链接:android:autoLink="web"
设置颜色:android:textColor="XXX"
Activity类中获取文本框:
public void XXXActivity extends Activity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView("R.layout.XXXX"); //引用视图组件(XXX.xml)
TextView tv = (TextView)findViewById(R.id.XXX); //获取文本框对象
String getViewContent = tv.getText().toString(); //获取文本框内容
tv.setText("java程序设置文本框内容"); //设置文本框内容
}
}
2、编辑框<EditText/>
<EditText android:id="@+id/XXX"
android:layout_width="200sp"
android:layout_height="wrap_content"
android:hint="XXXX" //设置编辑框中的提示文字
android:inputType="Integer" //设置编辑框中的文本类型
/>
Activity类中获取编辑框:
public void XXXActivity extends Activity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView("R.layout.XXXX");
//引用视图组件(XXX.xml)
EditView ev = (EditView )findViewById(R.id.XXX); //获取编辑框对象
String getViewContent = ev.getText().toString(); //获取编辑框内容
tv.setText("java程序设置编辑框内容"); //设置编辑框内容
}
}
3、按钮<Button/>——包含视图组件的响应方式学习
<Button android:id="@+id/XXX"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="提交"
/>
在Activity中触发Button事件(第一种方式:通过监听器):
public void XXXActivity extends Activity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView("R.layout.XXXX");
//引用视图组件(XXX.xml)
Button button = (Button)findViewById(R.id.XXX);
button.setOnclickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent = new Intent(); //创建Intent对象
//设置跳转的当前Activity和跳转到的Activity
intent.setClass(当前Activity类名.this, 跳转到的Activity类名.class);
intent.putExtra("数据名", String对象); //设置传输的数据
startActivity(intent); //跳转
}
});
}
}
数据到另一个Activity接收并显示:
TextView result=(TextView) findViewById(R.id.XXX); //显示传过来数据的文本框对象
result.setText(this.getIntent().getStringExtra("数据名")); //设置文本框内容为:前一个Activity传输过来的String
result.setText(this.getIntent().getStringExtra("数据名")); //设置文本框内容为:前一个Activity传输过来的String
第二种方式:通过回调方法实现(不用设置监听器):
在button组件中,设置
android:onClick="方法名"属性
public XXXActivity extends Activity{
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.XXX);
}
public void 方法名(View v){
具体处理代码,参考监听器方式
}
}
4、图片视图<ImageView/>
<ImageView
android:maxWidth="XXXpx" //设置最大宽度
android:maxHeight="XXXpx" //设置最大高度
android:adjustViewBounds="true" //是否允许调整图片,允许
android:scaleType="XXX" //scaleType设置图片缩放方式
//fitStart、fitCenter、fitEnd,按比例缩放,分别置于imageView左上角、中间、右下
//center按原图大小显示,如果超过最大边界,只显示中间部分
//centerCrop按边框比例缩放,直到完全覆盖边框
//centerInside按图片比例缩放,直到能完全显示图片
……
/>
5、单选按钮<RadioButton/>——使用方式基本一致
<RadioButton android:id="@+id/XXX"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXX"
android:checked="true" //默认选项
/>
……
6、复选按钮<CheckBox/>——使用方式基本一致
<CheckBox android:id="@+id/XXX"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="XXX"
/>
……
7、下拉列表<Spinner>
<Spinner android:id="@+id/XXX"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/数组名"
/>
在res\values\arrays.xml中有如下配置:
<resource>
<string-array name="数组名">
<item>XXX1</item>
<item>XXX2</item>
……
</string-array>
</resource>
五、视图界面布局
1、线性布局——LinearLayout
最简单的布局之一,可以垂直排列,可以水平排列,垂直排列每行只有一个组件,水平排列,每列只有一个组件。
主要有两个较特殊属性:
android:orientation="vertical" //垂直布局,horizontal水平布局
(其他布局公用)android:gravity="center" //组件对齐方式,center全局居中,top顶部,left左部
//center_horizontal行居中,center_vertical列居中
//多种对齐方式间用'|'分隔,如top|left,左上对齐
2、表格布局——TableLayout
类似与常见的表格,通过制定行和列的形式来管理视图组件。一个<TableRow></TableRow>就是一行,在其中可设置多个组件,如果不指定<TableRow>,那么就按线性布局方式排列,一个组件占一行。
在表格布局中,列宽由该列最宽的组件决定,行高由该行最高的组件决定。
3、帧布局——FrameLayout
每个组件都从屏幕左上角开始布局,所有组件叠加在一起进行显示,默认后设置的组件会覆盖前组件相应位置。
4、相对布局——RelativeLayout
按照组件之间的相对位置进行布局,是实际布局中最常用的使用方式之一。相对布局灵活性大,属性多,属性间产生冲突的可能性也比较大,但
能最大程度的保证在各种屏幕类型的移动设备上可以显示界面布局。
主要有三类特殊属性:
1、相对布局中取值为true或false的属性:
android:layout_centerHorizoncal 行居中
android:layout_centerVertical 列居中
android:layout_centerInParent 全局居中
android:layout_alignParentLeft /Right/Bottom/Top与父组件某一端对齐
2、组件之间的位置关系设置,取值为其他组件的ID
android:layout_toRightOf="@id/XXX" 设置在XXX的右侧
android:layout_toLeftOf=""
设置在XXX的左侧
android:layout_above
设置在XXX的上面
android:layout_below
设置在XXX的右侧
android:layout_alignLeft /Right/Bottom/Top 某个方向边界对齐XXX
3、取值为像素值的属性
android:layout_marginLegt
/Right/Bottom/Top
某个方向留白多少像素点