android学习笔记(三) Android四大组件之Activity

在Android应用中,提供了4大基本组件,分别是Activity、Service、BroadcastReceiver和ContentProvider。而Activity是Android应用最常见的组件之一,它提供了和用户交互的可视化界面。在一个Activity中可以添加很多组件,这些组件负责具体的功能。今天这篇博客将系统地从以下几个方面介绍Android中的Activity组件。

1、Activity概述

2、Activity的启动流程

3、Activity的生命周期

4、Activity的启动模式


一、Activity概述

1、Activity是什么?

它是一种可以包含用户界面的组件,主要用于和用户进行交互,一个应用程序中可以包含零个或多个Activity。

2、Activity的基本用法

首先,需要新建一个Android项目,项目的名称可以为HelloWorld,包名可以使用com.zjut.activity。当建立好工程后,会有一个默认的Activity

----MainActivity,它继承Activity并重写onCreate()方法,在重写的onCreate()方法中加载默认布局activity_main,具体代码如下:

package com.zjut.activity;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

}

2.1创建一个Activity

新建一个Activity有两种方法,下面做一一介绍

方法一:

(1)右击 com.zjut.activity 包→New→Class,会弹出新建类的对话框,我们新建一个名为 TestActivity 的类,并让它继承自 Activity,点击 Finish 完成创建。然后重写onCreate()方法。(要记住,任何Activity中都需要重写onCreate()方法。),具体代码如下:

package com.zjut.activity;

import android.app.Activity;
import android.os.Bundle;

public class TestActivity extends Activity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
	}
}

(2)然后创建和加载一个布局,右击 res/layout 目录→New→Android XML File,会弹出创建布局文件的窗口。我们给这
个布局文件命名为 test_activity,根元素就默认选择为 LinearLayout,然后打开test_activity,会加载如下代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</LinearLayout>

(3)加载布局文件。打开TestActivity,在重写的onCreate()方法中加上如下代码:

// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.test_activity);

(4)在清单文件中配置新建的Activity。打开清单文件AndroidManifest.xml,代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.zjut.activity"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.zjut.activity.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

在<activity></activity>后面加上<activity  android:name=".TestActivity">   </activity>

这样,一个新的Activity就建好了。

方法二:右击 com.zjut.activity 包→New→Other→Android→选择Android Activity,点击Next,填写相应的Activity名称,点击确认,这样就建立好了一个新的Activity。用此种方法新建的Activity已经为我们加载好布局文件和配置好了AndroidManifest.xml文件,方便简洁。

2.2 使用Intent在Activity之间穿梭

只有一个Activity的应用也太简单了吧?没错,你的追求应该更高一点。不管你想创建多少个Activity,方法都和上一节中介绍的是一样的。唯一的问题在于,你在启动器中点击应用的图标只会进入到该应用的主Activity,那么怎样才能由主Activity跳转到其他Activity呢?我们现在就来一起看一看。主要以代码来介绍

2.2.1 使用显式 Intent

显示Intent主要运用于一个应用中的Activity之间的穿梭和数据的传输

MainActivity.java:

package com.atguigu.l02_activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	private EditText et_main_message;
	private Button btn_main_start1;
	private Button btn_main_start2;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//初始化视图对象
		et_main_message = (EditText) findViewById(R.id.et_main_message);
		btn_main_start1 = (Button) findViewById(R.id.btn_main_start1);
		btn_main_start2 = (Button) findViewById(R.id.btn_main_start2);
		//设置点击监听
		btn_main_start1.setOnClickListener(this);
		btn_main_start2.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {//v就是发生事件的视图对象(操作的)
		if(v==btn_main_start1) {
			//Toast.makeText(this, "一般启动", 0).show();
			//1). 创建Intent对象(显式)
			Intent intent = new Intent(this, SecondActivity.class);
			//2). 通过intent携带额外数据
			String message = et_main_message.getText().toString();
			intent.putExtra("MESSAGE", message);
			//3). 启动Activity
			startActivity(intent);
			
		} else if(v==btn_main_start2) {
			//Toast.makeText(this, "带回调启动", 0).show();
			
			//1). 创建Intent对象(显式)
			Intent intent = new Intent(this, SecondActivity.class);
			//2). 通过intent携带额外数据
			String message = et_main_message.getText().toString();
			intent.putExtra("MESSAGE", message);
			//3). 带回调启动Activity
			int requestCode = 2;
			startActivityForResult(intent, requestCode);
		}
	}
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		//判断code
		if(requestCode==2 && resultCode==3) {
			//从data中取出数据
			String result = data.getStringExtra("RESULT");
			//显示
			et_main_message.setText(result);
		}
	}
}

SecondActivity.java:

package com.atguigu.l02_activity;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

/**
 * 界面二
 * 
 * @author Administrator
 *
 */
public class SecondActivity extends Activity {

	private EditText et_second_message;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		
		et_second_message = (EditText) findViewById(R.id.et_second_message);
		
		//4). 得到intent对象
		Intent intent = getIntent();
		//5). 通过intent读取额外数据
		String message = intent.getStringExtra("MESSAGE");
		//6). 显示到EditText
		et_second_message.setText(message);
	}
	
	public void back1(View v) {
		//关闭当前界面
		finish();
	}
	
	public void back2(View v) {
		
		//保存一个结果
		int resultCode = 3;
			//准备一个带额外数据的intent对象
		Intent data = new Intent();
		String result = et_second_message.getText().toString();
		data.putExtra("RESULT", result);
			//设置结果
		setResult(resultCode, data );
		
		//关闭当前界面
		finish();
	}
}

activity_mian.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/et_main_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:hint="请输入您的信息">
    </EditText>

    <Button
        android:id="@+id/btn_main_start1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="一般启动" />

    <Button
        android:id="@+id/btn_main_start2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="带回调启动" />

</LinearLayout>

activity_second.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <EditText
        android:id="@+id/et_second_message"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:hint="请输入您的信息">
    </EditText>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="一般返回" 
        android:onClick="back1"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="带结果的返回" 
        android:onClick="back2"/>

</LinearLayout>

运行的结果截图如下:

 

在这个案例中,输入信息后,当点击第一个按钮时,会通过Intent将数据传输到第二个界面并显示在输入框中。当我们需要从第二个界面中返回数据到第一个界面中,点击第二个按钮,然后再在输入框中修改第一个界面传输过来,点击第二个·按钮,即可将第二个界面的数据传输到第一个界面。

2.2.2 使用隐式Intent

隐式Intent主要运用于两个应用之间界面的开启,具体实现参照下面案例。

MainActivity.java:

package com.atguigu.app02_activity;

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnLongClickListener {

	private EditText et_main_number;
	private EditText et_main_sms;
	private Button btn_main_call;
	private Button btn_main_send;
	private OnClickListener onClickListener = new View.OnClickListener() {
		@Override
		public void onClick(View v) {
			if(v==btn_main_call) {//点击打电话
				//Toast.makeText(MainActivity.this, "点击打电话", 0).show();
				
				//1). 创建一个Intent(隐式)
				//08-28 03:27:09.976: I/ActivityManager(1222): Displayed com.android.dialer/.DialtactsActivity: +535ms
				String action = "android.intent.action.DIAL";
				action = Intent.ACTION_DIAL;//一样的
				Intent intent = new Intent(action);
				//2). 携带数据
				String number = et_main_number.getText().toString();
				intent.setData(Uri.parse("tel:"+number)); //<data android:scheme="tel" />
				//3). startActivity(intent)
				startActivity(intent);
			}else if(v==btn_main_send) {//点击发短信
				Toast.makeText(MainActivity.this, "点击发短信", 0).show();
				//1). 创建一个Intent(隐式)
				//08-28 04:00:02.420: I/ActivityManager(1222): Displayed com.android.mms/.ui.ComposeMessageActivity: +132ms
				Intent intent = new Intent(Intent.ACTION_SENDTO);//android.intent.action.SENDTO
				//2). 携带数据(号码/内容)
				String number = et_main_number.getText().toString();
				String sms = et_main_sms.getText().toString();
				intent.setData(Uri.parse("smsto:"+number));
				//携带额外数据
				intent.putExtra("sms_body", sms);
				//3). startActivity(intent)
				startActivity(intent);
			}
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		//初始化视图对象
		et_main_number = (EditText) findViewById(R.id.et_main_number);
		et_main_sms = (EditText) findViewById(R.id.et_main_sms);
		btn_main_call = (Button) findViewById(R.id.btn_main_call);
		btn_main_send = (Button) findViewById(R.id.btn_main_send);
		//给视图对象设置点击监听
		btn_main_call.setOnClickListener(onClickListener);
		btn_main_send.setOnClickListener(onClickListener);
		//给视图对象设置长按监听
		btn_main_call.setOnLongClickListener(this);
		btn_main_send.setOnLongClickListener(this);
	}
	
	@Override
	public boolean onLongClick(View v) {
		if(v==btn_main_call) {//长按打电话
			//Toast.makeText(MainActivity.this, "长按打电话", 0).show();
			//1). 创建一个Intent(隐式)
			//08-28 03:38:59.717: I/ActivityManager(1222): Displayed com.android.phone/.PrivilegedOutgoingCallBroadcaster: +570ms
			Intent intent = new Intent(Intent.ACTION_CALL);//android.intent.action.CALL
			//2). 携带数据
			String number = et_main_number.getText().toString();
			intent.setData(Uri.parse("tel:"+number));
			//3). startActivity(intent)
			startActivity(intent);
			
		}else if(v==btn_main_send) {//长按发短信
			Toast.makeText(MainActivity.this, "长按发短信", 0).show();
			
			//1). 得到SmsManager的对象
			SmsManager smsManager = SmsManager.getDefault();
			//2). 发送文本信息(短信)
			String number = et_main_number.getText().toString();
			String sms = et_main_sms.getText().toString();
			smsManager.sendTextMessage(number, null, sms, null, null);
		}
		return true;//不会再触发点击事件(表示此事件已经被消费了)
	}
}

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="电话号码: " />

        <EditText
            android:id="@+id/et_main_number"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="请输入号码">
        </EditText>
    </LinearLayout>
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="短信内容: " />

        <EditText
            android:id="@+id/et_main_sms"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:hint="请输入短信">
        </EditText>
    </LinearLayout>
    
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/btn_main_call"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="打电话" />

        <Button
            android:id="@+id/btn_main_send"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="发短信" />

    </LinearLayout>

</LinearLayout>

在这个案例中,主要实现当点击相应的按钮时,会开启系统自带的打电话或者发短信的页面,进行相应的操作。

 

二、Activity的启动流程

如图所示,是一个从第一个Activity界面开启到第二个Activity的启动流程图:

当我们运行一个应用时,Android操作系统首先加载ActivityManager类,ActivityManager服务是对Activity管理、运行时功能管理和运行时数据结构的封装,进程(Process)、应用程序/包、服务(Service)、任务(Task)信息等。然后我的应用开启MainActivity。当我们需要页面跳转是,Intent对象调用ActivityManager来开启SecondActivity。

Activity在运行过程中,分为以下四个状态:

运行状态: 可见也可操作 。当一个Activity位于返回栈(关于返回栈的概念下面再介绍)的栈顶时,这时Activity就处于运行状态,系统会将处于栈顶的Activity显示给用户。

暂停状态: 可见但不可操作 。当一个Activity不再处于栈顶位置,但仍然可见,这时Activity就进入了暂停状态。初学者可能会有这样的疑问,既然Activity都已经不在栈顶了,怎么会还可见呢,这是因为并不是每一个Activity都会占满整个屏幕的,比如对话框形式的Activity只会占用屏幕中间的部分区域。

停止状态: 不可见,但对象存在 。当一个Activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。

死亡状态: 对象不存在。当一个Activity从返回栈中移除后就变成了销毁状态。

三、Activity的生命周期

如图所示,是Activity的生命周期图:

Activity 类中定义了七个回调方法,覆盖了活动生命周期的每一个环节,下面我来一一介绍下这七个方法。
1. onCreate()
这个方法你已经看到过很多次了,每个活动中我们都重写了这个方法,它会在活动第一次被创建的时候调用。你应该在这个方法中完成活动的初始化操作,比如说加载布局、绑定事件等。
2. onStart()
这个方法在活动由不可见变为可见的时候调用。
3. onResume()
这个方法在活动准备好和用户进行交互的时候调用。此时的活动一定位于返回栈的栈顶,并且处于运行状态。
4. onPause()
这个方法在系统准备去启动或者恢复另一个活动的时候调用。我们通常会在这个方法中将一些消耗 CPU 的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然会影响到新的栈顶活动的使用。
5. onStop()
这个方法在活动完全不可见的时候调用。它和 onPause()方法的主要区别在于,如果启动的新活动是一个对话框式的活动,那么 onPause()方法会得到执行,而 onStop()方法并不会执行。
6. onDestroy()
这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
7. onRestart()
这个方法在活动由停止状态变为运行状态之前调用,也就是活动被重新启动了。

下面通过一个实例来说明:

MainActivity.java:

package com.atguigu.l02_life;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

/**
 * 
 * @author Administrator
 1)界面从“死亡”-->“运行" 
    创建对象-->onCreate()-->onStart()-->onResume()---可见可操作(运行状态)
2) 界面从“运行”-->“死亡" 
    onPause()-->onStop()-->onDestroy()-->Activity对象成为垃圾对象---不可见也不存在死亡状态)
3) 界面从“运行”-->“停止" 
    onPause()-->onStop()---不可见但存在
4) 界面从“停止” -->“运行"
    onRestart()-->onStart()-->onResume()
5) 界面从“运行”-->“暂停" 
    onPause()
6) 界面从“暂停” -->“运行"
   onResume()
   
   重要的:
   1. onCreate(): 在Activity对象创建后调用, 只执行一次
   2. onDestroy(): 在Activity死亡之前调用, 只执行一次
   3. onResume(): 界面只有经历此方法才能可见可操作
 */
public class MainActivity extends Activity{

	public MainActivity() {
		Log.e("TAG", "MainActivity()");
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		Log.e("TAG", "onCreate()");
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	
	@Override
	protected void onStart() {
		Log.e("TAG", "onStart()");
		super.onStart();
	}
	
	@Override
	protected void onResume() {
		Log.e("TAG", "onResume()");
		super.onResume();
	}
	
	@Override
	protected void onPause() {
		Log.e("TAG", "onPause()");
		super.onPause();
	}
	
	@Override
	protected void onStop() {
		Log.e("TAG", "onStop()");
		super.onStop();
	}
	
	@Override
	protected void onRestart() {
		Log.e("TAG", "onRestart()");
		super.onRestart();
	}
	
	@Override
	protected void onDestroy() {
		Log.e("TAG", "onDestroy()");
		super.onDestroy();
	}
	
	public void startSecond(View v) {
		startActivity(new Intent(this, SecondActivity.class));
	}
}

SecondActivity.java:

package com.atguigu.l02_life;

import android.app.Activity;
import android.os.Bundle;

/**
 * 界面二
 * 
 * @author Administrator
 *
 */
public class SecondActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
		
	}
}

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:text="界面111111111">
    </TextView>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="进入界面2" 
        android:onClick="startSecond"/>

</LinearLayout>

activity_second.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:text="界面222222">
    </TextView>


</LinearLayout>

四、Activity的启动模式

Activity的启动模式对你来说应该是个全新的概念,在实际项目中我们应该根据特定的需求为每个Activity指定恰当的启动模式。启动模式一共有四种,分别是 standard、singleTop、singleTask 和 singleInstance , 可 以 在 AndroidManifest.xml 中 通 过 给 <activity> 标 签 指 定android:launchMode 属性来选择启动模式。下面我们来逐个进行学习。

standard: 标准模式,每次调用startActivity()方法就会产生一个新的实例。是Activity默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种启动模式。

singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例;如果不位于栈顶,会产生一个新的实例。 singleTask: 只有一个实例, 默认在当前Task中 。

singleInstance: 只有一个实例, 创建时会新建一个栈, 且此栈中不能有其它对象。

下面以一个实例介绍。

MainActivity.java:

package com.atguigu.l02_lauchmode;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

/**
 * 
 */
public class MainActivity extends Activity{

	public MainActivity() {
		Log.e("TAG", "MainActivity()");
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		Log.e("TAG", "onCreate()");
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
	

	public void startSecond(View v) {
		startActivity(new Intent(this, SecondActivity.class));
	}
	
	public void startFrist(View v) {
		startActivity(new Intent(this, MainActivity.class));
	}
}

SecondActivity.java:

package com.atguigu.l02_lauchmode;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

/**
 * 界面二
 * 
 * @author Administrator
 *
 */
public class SecondActivity extends Activity {

	public SecondActivity() {
		Log.e("TAG", "SecondActivity()");
	}
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_second);
	}
	
	public void startFrist(View v) {
		startActivity(new Intent(this, MainActivity.class));
	}
	
	public void startThird(View v) {
		startActivity(new Intent(this, ThirdActivity.class));
	}
}

ThirdActivity.java:

package com.atguigu.l02_lauchmode;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class ThirdActivity extends Activity {

	public ThirdActivity() {
		Log.e("TAG", "ThirdActivity()");
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_third);
	}
}

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:text="界面111111111">
    </TextView>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动界面2222" 
        android:onClick="startSecond"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动界面1111" 
        android:onClick="startFrist"/>

</LinearLayout>

activity_second.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" 
        android:text="界面22222">
    </TextView>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动界面3333" 
        android:onClick="startThird"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="启动界面1111" 
        android:onClick="startFrist"/>

</LinearLayout>

activity_third.java:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="${relativePackage}.${activityClass}" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="界面33333" />

</RelativeLayout>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值