安卓基础学习(android studio)
一、
安卓需要在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;}@Overridepublic 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);}@Overrideprotected void onDestroy(){ super.onDestroy(); ActivityCollector.removeActivity(this);}
最后在进程BaseActivity的活动中的onClick书写如下代码
ActivityCollector.finishAll();
更多相关文章
- Android(安卓)获取当前时间及时间戳的互换
- Android(安卓)Property
- android 卸载程序、清除数据、停止服务用法
- 终结篇:Android(安卓)startActivity原理分析(基于Android(安卓)8.
- Android回调接口简单理解
- Android(安卓)Camera 模块分析
- android 通话记录插入 短信插入 联系人插入
- android 按键声音
- android 数据库 sqlite数据类型(时间 日期 double等)