Android第一行代码--学习笔记(更新中ing)
O(∩_∩)O–作者 说:
请原谅我无耻的称自己为作者了!本文是作者看《Android第一行代码》然后自己摘抄书上觉得对自己目前有用的内容,目前作者也是刚刚入门学习阶段,如果有错误希望大家多多指正。
PS:为什么我会写这几句没用的东西(因为昨天写的笔记突然好多人看。。。我慌了)只是分享看书而已!
最后,文章尽量日更,每次更新一点今天新学的东西,大家一起加油
Android第一行代码–学习笔记
认识四大组件
⭐️活动Activity
⭐️服务Service
⭐️广播接收器Broadcast Receiver
⭐️内容提供器Content Provider
AndroidMainfest.xml文件
简述:1.程序中定义的所有四大组件,都需要在这个文件里注册
2.给应用程序添加权限声明
其中:
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
这两行代码所在Activity,表示此Activity是主活动,点开本程序的入口
- 1
- 2
- 3
build.gradle文件
build.gradle(Project)
buildscript {
repositories {
jcenter() //代码托管仓库
}
dependencies {
classpath "com.android.tools.build:gradle:7.0.2"
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.31"
//声明gradle插件
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
build.gradle(Module)
plugins {
id 'com.android.application' //这是一个应用程序模块
id 'com.android.library' //这是一个库模块
}
android {
compileSdk 31 //指定项目的编译版本
defaultConfig {
applicationId "com.co.test" //指定项目包名
minSdk 26 //指定项目最低兼容Android系统版本
targetSdk 31 //运行时权限
versionCode 1 //项目版本号
versionName "1.0" //项目版本名
}
buildTypes { //用于指定安装文件的相关配置
release { //正式
minifyEnabled false //是否对项目代码进行混淆
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' //指定混淆时使用的规则文件
}
debug { //测试
minifyEnabled false
}
}
dependencies { //指定项目所有的依赖关系 1.本地依赖 2.库依赖 3.远程依赖
//需要啥用啥就是了。。。
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
Android日志工具Log
⭐️Log.v():用于打印琐碎,意义最小的日志信息
⭐️Log.d():用于打印一些调试信息
⭐️Log.i():用于打印一些比较重要的数据
⭐️Log.w():用于打印一些警告信息
⭐️Log.e():用于打印程序中的错误信息
加载布局的方法
🗡最基础方法
setContentView(R.Layout.home_layout)
- 1
Intent
核心:用于组件交互,包括当前组件想执行的动作和组件之间传递数据
显式Intent
🗡需求:启动目标活动
思路:Activity类提供了一个startActivity()方法,用于启动活动。此方法接收一个Intent参数,将构建好的Intent传入startActivity()方法即可。
Intent intent = new Intent(FirstActivity.this,SecondActivity.class)
startActivity(intent);
- 1
- 2
隐式Intent
🗡需求:启动目标活动
思路:大体同显式,但需要在AndroidMainfest文件中配置action和category标签
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
Intent intent = new Intent(com.example.activitytest.ACTION_START)
startActivity(intent);
- 1
- 2
- 3
- 4
- 5
- 6
Intent传递数据
🗡最简单的传递方式
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
intent.putExtra("键值",数据);//传递
startActivity(intent);
- 1
- 2
- 3
接收
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
- 1
- 2
🗡返回数据给上一个活动
思路:Activity中的startActivityForResult()方法也是用于启动活动的,这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。
[注意]:startActivityForResult()方法接收两个参数,第一个参数还是Intent,第二个参数是请求码,用于在之后的回调中判断数据的来源。
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivityForResult(intent,1); //请求
- 1
- 2
返回
Intent intent = new Intent();
intent.putExtra("data_return","hello one");
setResult(RESULT_OK,intent);
finish();
- 1
- 2
- 3
- 4
在第一个activity中接收
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
switch(requestCode){
case 1:
if(resultCode == RESULT_OK) {
String returnedData = data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
}
break;
default:
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
Fragment-动态添加碎片
private void replaceFragment(Fragment fragment){
FragmentManager fragmentManager = getSupportFragmentMannager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.right_layout,fragment);
transaction.addToBackStack(null); //补充:接收一个名字用于描述返回栈的状态(就是点back程序不会退出,而是回到上一个fragment)
transaction.commit();
}
//总结:
//1.创建待添加碎片,就是new一个fragment
//2.获取FragmentManager,可以直接在activity中getSupportFragmentMannager()调取
//3.开启一个事务,通过调用beginTransaction()方法开启
//4.向容器内添加或替换碎片,一般用replace()方法,其中需要传入容器id和待添加的碎片实例
//5.提交事务,调用commit()
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
调用Fragment(碎片)里的方法
RightFragment rightFragment = (RightFragment) getFragmentManager().findFragmentById(R.id.right_fragment);
//利用findFragmentById获取碎片实例
- 1
- 2
从Text中取值
String text = tv.getText().toString();
//实例化对象.getText().toString();
- 1
- 2