一、
安卓需要在AndroidManifest.xml注册一个活动,如果在这个文件中没有注册,则这个活动将无法运行
该注册代码为
//对MainActivity的注册
二、
Android.gradle使用了基于groovy的特定领域语言(DSL)来声明项目设置。
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.ewewwfef.myapplication6"
minSdkVersion 25 //用于指定兼容最低的android版本
targetSdkVersion 26 //表示在指定的版本上经过了充分的1测试
versionCode 1
versionName "1.0"
// versionCode ersionName 项目版本号与版本名,在之后程序安装的过程中十分的重要
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
//这其中还包括release包,而release包可以忽略不写。
release {
//对于指定代码进行混淆的内容
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
三、
自己手动创建activity这时候选择new empty activity
勾选backwords compatibility是自动向下兼容
上面两个选项分别是自动生成布局和选择当前活动为主活动。
点击finish则自动生成带吗如下
package com.example.ewewwfef.myapplication;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
其中声明了onCreate方法,我们也可以在其中加入我们自己的逻辑
四、
注册主活动
五、
在活动中使用Toast
代码如下
public class FirstActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
Button button1=(Button)findViewById(R.id.button_1);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(FirstActivity.this,"you clicked button1",
Toast.LENGTH_SHORT).show();
}
});
}
}
public void onClick(View view)
{
finish();
}
将onClick函数中的内容改为finish()则点击按钮之后该活动将被销毁。
六、
使用intent在活动之间穿梭
①首先是使用显示intent的穿梭
Intent的头文件为android.content.Intent;
以下为调用intent的代码
public void onClick(View view)
{
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);
}
②隐式intent的穿梭
AndroidMainfest中的代码如下
调用intent的代码如下
public void onClick(View view)
{
Intent intent=new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);
}
③隐式intent穿梭的扩展内容
调用intent的代码如下
public void onClick(View view)
{
/* Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));*///扩展到www.baidu.com
Intent intent=new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));//扩展到拨打10086
startActivity(intent);
}
七、
Menu菜单的使用
在res文件夹下新建menu文件夹,在menu文件夹下新建menu resource文件main.xml并在该文件中添加如下代码
并在firstactivity.java中添加如下代码
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {//按钮选择事件
switch (item.getItemId())
{
case R.id.add_item:
Toast.makeText(this,"You clicked add",Toast.LENGTH_SHORT).show();
break;
case R.id.remove_item:
Toast.makeText(this,"You clicked remove",Toast.LENGTH_SHORT).show();
break;
default:
}
return true;
}
这个代码再次使用了toast,如果点击按钮则会产生黑框
onOptionsItemSelected函数是用来判断我们点击了哪一个选项
onCreateOptionsMenu函数是用来创建menu对象,inflate的两个参数分别是菜单格式的原文件和菜单格式将要应用的对象
八、向下一个活动传递数据
FirtActivity中的代码
public void onClick(View view) {
String data="Hello seccondActivity";
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivity(intent);
}
secondActivity中的代码
Intent intent=getIntent();
String data=intent.getStringExtra("extra_data");
Log.d("SecondActivity",data);
该段代码在onCreate()函数中
运行该段代码后,点击目标按钮将会在logcat中输出hello secondActivity
九、返回数据给上一个活动
SecondActivity代码
public void onClick(View view)
{
Intent intent=new Intent();
intent.putExtra("data_return","Hello FirstActivity");
setResult(RESULT_OK,intent);
finish();
}
firstActivity中的代码
protected void onActivityResult(int requestCode,int resultCode,Intent data)
{
switch(requestCode)
{
case 1:
if(requestCode==RESULT_OK)
{
String returnedData=data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
}
break;
default:
}
}
onCreate函数中的代码
public void onClick(View view) {
String data="Hello seccondActivity";
Intent intent=new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("extra_data",data);
startActivityForResult(intent,1);
}
十、活动的生存周期
Activity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节,其分别为
onCreate(),onStart(),onResume(),onPause(),onStop(),onDestroy(),
onRestart()
这七个方法除了onRestart()
方法,其他都是两两相对的,可以分为三种生存期
① 完整生存期
onCreate(),onDestroy()
之间
② 可见生存期
onStart(),onStop()
之间
③ 前台生存期
onResume(),onPause()
之间
十一、活动的生存周期开发实践
①首先按照书上的代码编写时android:theme="@android:style/Theme.Dialog"
若在AndroidManifest
中有此段代码,则运行时会报错
这句代码应该是第二个活动不完全遮住主活动的意思
这样onStop()
函数不会执行,但是这个代码执行会有错误。
②在onCreate通过savedInstanceState保存活动中的数据
if(savedInstanceState!=null)
{
String tempDate=savedInstanceState.getString("data_key");
}
而且需要在类中定义以下函数
protected void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
String tempData="Something you just typed";
outState.putString("data_key",tempData);
}
③ 活动的启动模式
在androidManifest.xml添加android:launchMode=”模式名称”
默认启动模式为Standard,下面列出所有的启动模式
Standard、SingleTop、SingleTask、SingleInstance
这几种模式的区别我没有详细看
④ 如何知晓当前是哪一个活动
要解决这个问题可以创建一个BaseActivity类(注:该类是写在各个活动所在的文件夹下的),这个类中没有活动实例,所以只需要创建一个.java文件,而且该类不需要再AndroidManifest.xml中注册
该类需要继承AppCopatActivity类
这样只需要重写onCreate()函数,让子类活动继承这个类便可以了
该类的书写方法
Protected void onCreate(Bundle savedInstanceState)
{
super.onCreate();
Log.d(“BaseActivity”,getClass.getSimpleName());
}
⑤ 随时随地的退出程序
需要先写一个ActivityCollector类,类中代码如下所示
public class ActivityCollector {
public static List activities =new ArrayList<>();
public static void addActivity(Activity activity)
{
activities.add(activity);
}
public static void removeActivity(Activity activity)
{
activities.remove(activity);
}
public static void finishAll()
{
for(Activity activit:activities)
{
if(!activit.isFinishing())
activit.finish();
}
}
}
然后BaseActivity类中重写onCreate方法
protected void onCreate(Bundle savedIntenceState)
{
super.onCreate(savedIntenceState);
Log.d("BaseActivity",getClass().getSimpleName());
ActivityCollector.removeActivity(this);
}
@Override
protected void onDestroy()
{
super.onDestroy();
ActivityCollector.removeActivity(this);
}
最后在进程BaseActivity的活动中的onClick书写如下代码
ActivityCollector.finishAll();