一.Activity的启动方式
Android中有个任务栈,就是用来专门存放Activity的,满足栈的后进先出.
在AndroidMainfest.xml系统配置文件中使用launchMode设置Activity启动属性.如:
<activity
android:name="com.example.launchmode.MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
1.standard:
默认方式,不管当前栈中有没有要启动的Activity,都会重启一个新的Activity放到栈中.
2.singleTop:
如果当前栈顶正好是要启动的Activity,就调用这个Activity;否则就重新创建新的Activity放到栈顶.
也就是说只要当前栈顶不是指定的Activity,都要创建新的Activity放到栈顶上.
3.singleTask:
如果当前栈中有指定的Activity,就跳到该Activity,此时这个Activity处于栈顶.如果没有就创建新的Activity.
不好的一点就是当找到需要的Activity时,会让处于它之上的所有Activity都出栈,因此该Activity才能处于栈顶.
4.singleInstance:
当指定启动模式为singleInstance时,系统会自动创建一个新栈并把该Activity放到新栈中,并且不允许其它Activity
进入该栈中.同时一旦启动了这个Activity,所有其它的应用都能共享这个Activity,而不需要重新再创建新的Activity.
二.Android界面布局介绍
Android中使用XML文件来布局界面,布局文件收录在res/layout文件夹下,可通过更改布局文件去设置活动界面.
1.线性布局(LinearLayout):
线性布局是最简单的布局之一,它提供了控件水平或者垂直排列的模型。
LinearLayout 常用的属性:
android:orientation 设置线性布局的朝向horizontal或vertical
android:gravity 设置控件的对齐方式
2.表格布局(TableLayout):
TableLayout 类以行和列的形式管理控件,每个<TableRow>占一行,在<TableRow>中每添加一个
控件,表格就增加一列.
常用属性:
android:collapseColumns 设置第几列隐藏
android:shrinkColumns 设置第几列收缩
android:stretchColumns 设置第几列伸展
3.框架布局(帧布局(FrameLayout)):
帧布局是最简单的界面布局,每当添加一个控件进来都会创建一个空白区域,这些控件由gravity属性设置对齐方式,
多个控件覆盖显示,最先添加的控件在最上边显示,下边控件尺寸没有最上边大的会被覆盖看不到,下边控件尺寸比最
上边控件尺寸大的会显示周围的一圈.
常用属性:
android:foreground 设置框架布局所有子控件之上的前景图像内容
android:foregroundGravity 设置所有子控件之上内容的gravity属性,也就是前景图像的位置
4.相对布局(RelativeLayout):
相对布局(RelativeLayout)是一种非常灵活的布局方式,能够通过指定界面元素与其他元素的相对位置关系.
常用属性:
android:gravity 设置各个子控件的对齐方式
android:ignoreGravity 指定哪个控件不受gravity的影响
如:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<Button
android:id="@+id/button0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Button0" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/button0"
android:text="Button1"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/button0"
android:text="Button2"/>
</RelativeLayout>
三.Button的五种监听方式以及同时监听五个Button事件
package com.example.buttondemo;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
//Button的五种监听事件方法
public class MainActivity extends ActionBarActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
// 第二种方式:通过设置外部类实现OnClickListener接口去监听Button事件
//需要构建一个外部类去继承OnClickListener接口并重写onClick方法
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new Listener2());
// 第三种方式:设置内部类实现OnClickListener接口去监听事件
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new Listener3());
// 第三种方式:设置匿名内部类监听事件
Button button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("Button4:", "第四个Button!");
}
});
// 第五种方式:直接使用本Activity去继承一个OnClickListener接口实现Activity中的onClick方法
Button button5 = (Button) findViewById(R.id.button5);
button5.setOnClickListener(MainActivity.this);
}
// 第一种方式:通过在xml文件中设置onClick属性
public void Listener(View v) {
Log.v("Button1:", "第一个Button!");
}
//内部类实现OnClickListener接口去监听事件
class Listener3 implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("Button3:", "第三个Button!");
}
}
//Activity继承OnClickListener接口,重写onClick方法实现事件监听
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("Button5:", "第五个Button!");
}
}
/*同时监听五个Button,用Switch去选择getId()判断到底是哪个Button的点击事件
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
//获取button1
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new Listener());
//获取button2
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new Listener());
//获取button3
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new Listener());
//获取button4
Button button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(new Listener());
//获取button5
Button button5 = (Button) findViewById(R.id.button5);
button5.setOnClickListener(new Listener());
}
//监听事件的处理
class Listener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
Log.v("Button1:", "第一个Button!");
break;
case R.id.button2:
Log.v("Button2:", "第二个Button!");
break;
case R.id.button3:
Log.v("Button3:", "第三个Button!");
break;
case R.id.button4:
Log.v("Button4:", "第四个Button!");
break;
case R.id.button5:
Log.v("Button5:", "第五个Button!");
break;
default:
break;
}
}
}
*/
四.问题
1.刚启动Eclipse时,所有项目全有错误
估计是eclipse没睡醒,启动完等一会看会好吗,不行就重启Eclipse.如果是自己手抖误删了某个包,那就只能重新导入jar包了...
2. Element type "RelativeLayout" must be followed by either attribute specifications, ">" or "/>".
这个就是某行代码少了引号或者缺了">" or "/>",一般来说在错误行上下文仔细找找都能发现错误的.
Android中有个任务栈,就是用来专门存放Activity的,满足栈的后进先出.
在AndroidMainfest.xml系统配置文件中使用launchMode设置Activity启动属性.如:
<activity
android:name="com.example.launchmode.MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
1.standard:
默认方式,不管当前栈中有没有要启动的Activity,都会重启一个新的Activity放到栈中.
2.singleTop:
如果当前栈顶正好是要启动的Activity,就调用这个Activity;否则就重新创建新的Activity放到栈顶.
也就是说只要当前栈顶不是指定的Activity,都要创建新的Activity放到栈顶上.
3.singleTask:
如果当前栈中有指定的Activity,就跳到该Activity,此时这个Activity处于栈顶.如果没有就创建新的Activity.
不好的一点就是当找到需要的Activity时,会让处于它之上的所有Activity都出栈,因此该Activity才能处于栈顶.
4.singleInstance:
当指定启动模式为singleInstance时,系统会自动创建一个新栈并把该Activity放到新栈中,并且不允许其它Activity
进入该栈中.同时一旦启动了这个Activity,所有其它的应用都能共享这个Activity,而不需要重新再创建新的Activity.
二.Android界面布局介绍
Android中使用XML文件来布局界面,布局文件收录在res/layout文件夹下,可通过更改布局文件去设置活动界面.
1.线性布局(LinearLayout):
线性布局是最简单的布局之一,它提供了控件水平或者垂直排列的模型。
LinearLayout 常用的属性:
android:orientation 设置线性布局的朝向horizontal或vertical
android:gravity 设置控件的对齐方式
2.表格布局(TableLayout):
TableLayout 类以行和列的形式管理控件,每个<TableRow>占一行,在<TableRow>中每添加一个
控件,表格就增加一列.
常用属性:
android:collapseColumns 设置第几列隐藏
android:shrinkColumns 设置第几列收缩
android:stretchColumns 设置第几列伸展
3.框架布局(帧布局(FrameLayout)):
帧布局是最简单的界面布局,每当添加一个控件进来都会创建一个空白区域,这些控件由gravity属性设置对齐方式,
多个控件覆盖显示,最先添加的控件在最上边显示,下边控件尺寸没有最上边大的会被覆盖看不到,下边控件尺寸比最
上边控件尺寸大的会显示周围的一圈.
常用属性:
android:foreground 设置框架布局所有子控件之上的前景图像内容
android:foregroundGravity 设置所有子控件之上内容的gravity属性,也就是前景图像的位置
4.相对布局(RelativeLayout):
相对布局(RelativeLayout)是一种非常灵活的布局方式,能够通过指定界面元素与其他元素的相对位置关系.
常用属性:
android:gravity 设置各个子控件的对齐方式
android:ignoreGravity 指定哪个控件不受gravity的影响
如:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<Button
android:id="@+id/button0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="Button0" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/button0"
android:text="Button1"/>
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/button0"
android:text="Button2"/>
</RelativeLayout>
三.Button的五种监听方式以及同时监听五个Button事件
package com.example.buttondemo;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
//Button的五种监听事件方法
public class MainActivity extends ActionBarActivity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
// 第二种方式:通过设置外部类实现OnClickListener接口去监听Button事件
//需要构建一个外部类去继承OnClickListener接口并重写onClick方法
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new Listener2());
// 第三种方式:设置内部类实现OnClickListener接口去监听事件
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new Listener3());
// 第三种方式:设置匿名内部类监听事件
Button button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("Button4:", "第四个Button!");
}
});
// 第五种方式:直接使用本Activity去继承一个OnClickListener接口实现Activity中的onClick方法
Button button5 = (Button) findViewById(R.id.button5);
button5.setOnClickListener(MainActivity.this);
}
// 第一种方式:通过在xml文件中设置onClick属性
public void Listener(View v) {
Log.v("Button1:", "第一个Button!");
}
//内部类实现OnClickListener接口去监听事件
class Listener3 implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("Button3:", "第三个Button!");
}
}
//Activity继承OnClickListener接口,重写onClick方法实现事件监听
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("Button5:", "第五个Button!");
}
}
/*同时监听五个Button,用Switch去选择getId()判断到底是哪个Button的点击事件
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_main);
//获取button1
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(new Listener());
//获取button2
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(new Listener());
//获取button3
Button button3 = (Button) findViewById(R.id.button3);
button3.setOnClickListener(new Listener());
//获取button4
Button button4 = (Button) findViewById(R.id.button4);
button4.setOnClickListener(new Listener());
//获取button5
Button button5 = (Button) findViewById(R.id.button5);
button5.setOnClickListener(new Listener());
}
//监听事件的处理
class Listener implements OnClickListener {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.button1:
Log.v("Button1:", "第一个Button!");
break;
case R.id.button2:
Log.v("Button2:", "第二个Button!");
break;
case R.id.button3:
Log.v("Button3:", "第三个Button!");
break;
case R.id.button4:
Log.v("Button4:", "第四个Button!");
break;
case R.id.button5:
Log.v("Button5:", "第五个Button!");
break;
default:
break;
}
}
}
*/
四.问题
1.刚启动Eclipse时,所有项目全有错误
估计是eclipse没睡醒,启动完等一会看会好吗,不行就重启Eclipse.如果是自己手抖误删了某个包,那就只能重新导入jar包了...
2. Element type "RelativeLayout" must be followed by either attribute specifications, ">" or "/>".
这个就是某行代码少了引号或者缺了">" or "/>",一般来说在错误行上下文仔细找找都能发现错误的.