Android第四天

本文详细介绍了Android中Activity的四种启动模式,包括standard、singleTop、singleTask和singleInstance,并讨论了它们的特点和应用场景。此外,还阐述了Android界面布局的四种类型:线性布局、表格布局、帧布局和相对布局,列举了各布局的常用属性。最后,文章讲解了Button的五种监听方式以及如何同时监听多个Button的事件。
一.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 "/>",一般来说在错误行上下文仔细找找都能发现错误的.
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值