简介
“Activity”是Android应用中负责与用户交互的组件,相当于Swing中的JFrame控件,但Jframe本身可以设置布局管理器,即自身可以添加组件,但activity只能通过“setContentView(View)”方法来显示布局文件中已经定义的组件
一、如何创建Activity
① 新建一个Android Studio工程;
② 在新建工程中创建Activity,命名为SecondActivity;
③ 为SecondActivity创建对应的UI界面,并通过setContView()设置layout布局页 面;
④ 完成Activity的注册。
1.布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/login_back">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="74dp"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_centerInParent="true"
android:layout_marginStart="-4dp"
android:layout_marginEnd="4dp"
android:layout_marginBottom="550dp"
android:backgroundTint="#D9E0E4"
android:text="请选择登录方式:"
android:textColor="#EAE4E4"
android:textSize="24sp" />
<Button
android:id="@+id/button1"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="82dp"
android:layout_marginEnd="89dp"
android:layout_marginBottom="424dp"
android:text="微信登录 -->" />
<Button
android:id="@+id/button2"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="85dp"
android:layout_marginEnd="86dp"
android:layout_marginBottom="358dp"
android:text="手机验证码登录 -->" />
<Button
android:id="@+id/button0"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="84dp"
android:layout_marginEnd="89dp"
android:layout_marginBottom="498dp"
android:text="QQ登录 -->" />
</RelativeLayout>
2.对应activity在AndroidManifest.xml文件里注册
3.布局效果:
二、如何实现跳转——intent的使用
1.显示intent的使用
1.1通过显式Intent设置当前上下文环境和目标Activity,实现第一种页面跳转
eg:通过点击首页QQ登录,跳转到QQ信息登录页面
①.布局文件
<?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:gravity="center_horizontal"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="80dp"
android:src="@drawable/qq" />
<FrameLayout
android:layout_width="350dp"
android:layout_height="70dp"
android:layout_marginTop="50dp" >
<EditText
android:id="@+id/qq_num"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="QQ号/手机号/邮箱"
android:inputType="number"
android:maxLines="1"
android:textSize="20sp"
android:gravity="center"/>
<ImageView
android:id="@+id/iv_et_num_delete"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_gravity="right|center_vertical"
android:layout_marginRight="20dp"
android:background="@drawable/delete" />
</FrameLayout>
<FrameLayout
android:layout_width="350dp"
android:layout_height="70dp"
android:layout_marginTop="20dp" >
<EditText
android:id="@+id/qq_pwd"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:hint="输入密码"
android:inputType="textPassword"
android:maxLines="1"
android:textSize="20sp"
android:gravity="center"/>
</FrameLayout>
<ImageView
android:id="@+id/qq_login"
android:layout_width="102dp"
android:layout_height="35dp"
android:layout_marginTop="80dp"
android:src="@drawable/go_right" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_marginTop="60dp"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/qq_forgetpwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="忘记密码"
android:textColor="#141313" />
<View
android:layout_width="1dp"
android:layout_height="10dp"
android:layout_marginLeft="50dp"
android:background="#141313" />
<TextView
android:id="@+id/qq_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="50dp"
android:text="用户注册"
android:textColor="#141313" />
</LinearLayout>
</LinearLayout>
设想效果:
②.QQ登录页面对应Activity文件
package com.example.test_intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class intent0 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.qq_login_test);
}
}
③.intent使用方法
package com.example.test_intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.annotation.Nullable;
public class SecondActivity extends Activity {
//关联界面
//重写方法
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_second_activity);
//button0:通过显式Intent设置当前上下文环境和目标Activity,实现第一种页面跳转。
//button0实例化
Button button00 = (Button) findViewById(R.id.button0);
//监听按钮
button00.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//显示intent
Intent intent0 = new Intent(SecondActivity.this,intent0.class);//当前上下文环境;目标类
//启动activity
startActivity(intent0);
}
});
}
④.注册信息
<activity android:name=".intent0">
</activity>
1.2 通过显式Intent设置目标Activity所在的包名和类的全路径,实现第二种页面跳转
eg:通过点击第二个按钮,使页面跳转到微信信息登录页面
①.微信登录页面布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent">
<ImageView
android:id="@+id/imageView4"
android:layout_width="136dp"
android:layout_height="126dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="16dp"
android:layout_marginEnd="12dp"
app:srcCompat="@drawable/truth" />
<TextView
android:id="@+id/textView2"
android:layout_width="186dp"
android:layout_height="48dp"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="3dp"
android:layout_marginEnd="164dp"
android:layout_marginBottom="440dp"
android:text="已关联微信账号,请输入密码" />
<EditText
android:id="@+id/editTextTextPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="277dp"
android:ems="10"
android:gravity="center"
android:hint="请输入微信密码"
android:inputType="textPassword" />
<TextView
android:id="@+id/wechat_id"
android:layout_width="176dp"
android:layout_height="97dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="23dp"
android:layout_marginEnd="198dp"
android:layout_marginBottom="611dp"
android:ems="10"
android:gravity="center"
android:text="真理"
android:textColor="#141313"
android:textSize="30sp"
android:textStyle="bold" />
<TextView
android:id="@+id/qq_forgetpwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="32dp"
android:layout_marginBottom="213dp"
android:text="忘记密码"
android:textColor="#141313" />
<View
android:layout_width="3dp"
android:layout_height="12dp"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginLeft="50dp"
android:layout_marginEnd="178dp"
android:layout_marginBottom="217dp"
android:background="#141313" />
<TextView
android:id="@+id/qq_register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginLeft="50dp"
android:layout_marginEnd="42dp"
android:layout_marginBottom="212dp"
android:text="用户注册"
android:textColor="#141313" />
<ImageView
android:id="@+id/qq_login"
android:layout_width="102dp"
android:layout_height="35dp"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="80dp"
android:layout_marginEnd="127dp"
android:layout_marginBottom="122dp"
android:src="@drawable/go_right" />
</RelativeLayout>
Design:
②.对应activity文件
package com.example.test_intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class intent1Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.wechat_login_test);
}
}
③.intent方法实现
package com.example.test_intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.annotation.Nullable;
public class SecondActivity extends Activity {
//关联界面
//重写方法
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_second_activity);
//button1:通过显式Intent设置目标Activity所在的包名和类的全路径,实现第二种页面跳转。
Button button10 = (Button) findViewById(R.id.button1);
button10.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent1 = new Intent();
intent1.setClassName("com.example.test_intent",
"com.example.test_intent.intent1Activity");//目标参数的包名与类名
startActivity(intent1);
}
});
}
④.注册文件
<activity android:name=".intent1Activity">
</activity>
2.隐式intent方法
通过隐式Intent设置setAction(),实现第三种页面跳转
eg:点击手机登录,实现页面跳转
①.布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:name="action2">
<EditText
android:id="@+id/editTextPhone"
android:layout_width="237dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginStart="99dp"
android:layout_marginTop="288dp"
android:layout_marginBottom="398dp"
android:ems="10"
android:hint="请输入您的手机号"
android:gravity="center"
android:inputType="phone"
android:visibility="visible"/>
<EditText
android:id="@+id/editTextNumber"
android:layout_width="131dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginEnd="184dp"
android:layout_marginBottom="318dp"
android:ems="10"
android:inputType="number" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="71dp"
android:layout_marginBottom="319dp"
android:text="验证码" />
<ImageView
android:id="@+id/qq_login"
android:layout_width="102dp"
android:layout_height="35dp"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginTop="80dp"
android:layout_marginEnd="143dp"
android:layout_marginBottom="241dp"
android:src="@drawable/go_right" />
<TextView
android:id="@+id/qq_forgetpwd"
android:layout_width="62dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginEnd="253dp"
android:layout_marginBottom="181dp"
android:text="返回"
android:textColor="#141313" />
<View
android:layout_width="1dp"
android:layout_height="21dp"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginLeft="50dp"
android:layout_marginEnd="192dp"
android:layout_marginBottom="177dp"
android:background="#141313" />
<TextView
android:id="@+id/qq_register"
android:layout_width="59dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginLeft="50dp"
android:layout_marginEnd="72dp"
android:layout_marginBottom="180dp"
android:text="帮助"
android:textColor="#141313" />
</RelativeLayout>
Design:
②.activity文件
package com.example.test_intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
public class intent2Activity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
③.隐式intent实现方法
在这里插入package com.example.test_intent;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import androidx.annotation.Nullable;
public class SecondActivity extends Activity {
//关联界面
//重写方法
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_second_activity);
//button2:通过隐式Intent设置setAction(),实现第三种页面跳转。
Button button20 = (Button) findViewById(R.id.button2);
button20.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent2 = new Intent();
intent2.setAction("Action0");
startActivity(intent2);
}
});
}
④.注册信息
<activity android:name=".intent2Activity">
<intent-filter>
<action android:name="Action0" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
三、总体结构
四、实现效果:
五、问题与总结
1.布局Design与最后实现效果不一致,运行app时,设计的页面没有完整显示
目前认为可能是布局tag有关,解决以后再及时更新
2.一开始运行app时,程序不报错,且能正常打开,但点击按钮时会提示“该应用已强制停止”,然后退出
这是因为页面内的代码不完整,对应activity没有在AndroidManifest.xml文件里注册,所以造成app文件不完整,想要运行正常就需要查看并保证对应每一个activity文件都有注册信息