WHCSRL 技术网

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
推荐阅读