一:
1:项目文件
开发中经常用到的有:
app目录:存放项目代码、资源文件
build.gradle:项目全局gradle脚本。
2:app目录
libs:放到libs目录下的第三方jar包会自动添加到项目构建路径。
java:存放java代码的地方。
res:资源文件目录,包括:图片、布局、字符串、颜色、样式、菜单等。
AndroidManifest.xml:项目配置文件。多用于注册四大组、添加权限等。
proguard-rules.pro:项目代码混淆规则。
3:build.gradle逐项解析
apply plugin: ‘com.android.application‘//说明module的类型,com.android.application为程序,com.android.library为库 android { compileSdkVersion 22//编译的SDK版本 buildToolsVersion "22.0.1"//编译的Tools版本 defaultConfig {//默认配置 applicationId "com.nd.famlink"//应用程序的包名 minSdkVersion 8//支持的最低版本 targetSdkVersion 19//支持的目标版本 versionCode 52//版本号 versionName "3.0.1"//版本名 } sourceSets {//目录指向配置 main { manifest.srcFile ‘AndroidManifest.xml‘//指定AndroidManifest文件 java.srcDirs = [‘src‘]//指定source目录 resources.srcDirs = [‘src‘]//指定source目录 aidl.srcDirs = [‘src‘]//指定source目录 renderscript.srcDirs = [‘src‘]//指定source目录 res.srcDirs = [‘res‘]//指定资源目录 assets.srcDirs = [‘assets‘]//指定assets目录 jniLibs.srcDirs = [‘libs‘]//指定lib库目录 } debug.setRoot(‘build-types/debug‘)//指定debug模式的路径 release.setRoot(‘build-types/release‘)//指定release模式的路径 } signingConfigs {//签名配置 release {//发布版签名配置 storeFile file("fk.keystore")//密钥文件路径 storePassword "123"//密钥文件密码 keyAlias "fk"//key别名 keyPassword "123"//key密码 } debug {//debug版签名配置 storeFile file("fk.keystore") storePassword "123" keyAlias "fk" keyPassword "123" } } buildTypes {//build类型 release {//发布 minifyEnabled true//混淆开启 proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-project.txt‘//指定混淆规则文件 signingConfig signingConfigs.release//设置签名信息 } debug {//调试 signingConfig signingConfigs.release } } packagingOptions { exclude ‘META-INF/ASL2.0‘ exclude ‘META-INF/LICENSE‘ exclude ‘META-INF/NOTICE‘ exclude ‘META-INF/MANIFEST.MF‘ } lintOptions { abortOnError false//lint时候终止错误上报,防止编译的时候莫名的失败 } } dependencies { compile fileTree(dir: ‘libs‘, exclude: [‘android-support*.jar‘], include: [‘*.jar‘]) //编译lib目录下的.jar文件 compile project(‘:Easylink‘)//编译附加的项目 compile ‘com.nostra13.universalimageloader:universal-image-loader:1.9.3‘//编译来自Jcenter的第三方开源库 }
4:菜单
菜单有多种:optionMenu、上下文菜单、弹出菜单等。
菜单可以在代码中动态添加,也可以在xml中定义好菜单项,在代码中加载。
菜单可以分组管理菜单项,也可以拥有子菜单。
5:Intent
Intent可以用于启动四大组件,可以携带数据,不过只能通过键值对的形式携带基本类型数据。
Intent有两种:显式Intent和隐式Intent。
隐式Intent通过添加action、category、data等附加内容,来匹配系统中符合要求(注册时配置 intent-filter)的活动、服务等。
6:返回数据的跳转
启动另一个活动可以有两种方法,其中startActivityForResult(intent,请求码)启动的跳转,可以在活动中重写回调方法onActivityResult(请求码,结果码,intent)来获取返回数据,通过请求码匹配具体请求的返回、通过结果码判断结果的类型,通过intent提取返回的数据。
7:保存Activity中的数据
活动跳转后,之前的活动可能会被回收,若想保存之前的活动的数据,使得返回这个活动时数据仍在,可以在活动中重写 onSaveInstanceState(bundle)回调方法,这个方法会在活动被回收之前调用,把数据存在budle中,那么下一次该活动重建时,可以在onCreate(bundle)中通过bundle取回数据。
8:精确定位活动
可以定义一个BaseActivity,继承自AppCompatActivity,然后定义一些通用的方法、操作,如:打印当前活动信息。
另其他活动继承BaseActivity,即可在项目运行时知道哪个页面对应哪个活动了。
9:批量管理活动
可以定义一个工具类,其中维护一个活动list。
同上面,在BaseActivity中重写onCreate方法,每当创建一个活动就通过工具类的景泰方法把活动添加到list中去。
那么工具类中其他方法就可以通过list批量操作活动了,例如:批量打印活动信息、批量结束活动等。
二: