安卓【Android studio】超全超详细的保姆级开发笔记
一、环境配置
1. Gradle系统环境变量
变量名:GRADLE_USER_HOME
变量值:E:\software\Android\gradle(根据自己的路径配置)

2. 设置Gradle镜像,下面以阿里云镜像为例(不设置会等超长时间)
1. 给Gradle bin文件下载,设置阿里云镜像
路径:项目根目录/gradle/wrapper/gradle-wrapper.properties文件
distributionUrl=https://mirrors.aliyun.com/macports/distfiles/gradle/gradle-版本号-bin.zip
2. 给Gradle依赖下载,设置阿里云镜像
路径:项目根目录/settings.gradle文件,按照下面设置镜像:
pluginManagement {
   
   
    repositories {
   
   
        // 使用阿里镜像源
        maven {
   
    url 'https://maven.aliyun.com/repository/google' }
        maven {
   
    url 'https://maven.aliyun.com/repository/central' }
        maven {
   
    url 'https://maven.aliyun.com/repository/gradle-plugin' }
        google {
   
   
            content {
   
   
                includeGroupByRegex("com\\.android.*")
                includeGroupByRegex("com\\.google.*")
                includeGroupByRegex("androidx.*")
            }
        }
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
   
   
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
   
   
        // 使用阿里镜像源
        maven {
   
    url 'https://maven.aliyun.com/repository/google' }
        maven {
   
    url 'https://maven.aliyun.com/repository/central' }
        google()
        mavenCentral()
    }
}
二、Hello World(开始新建项目,研究语法、代码)
1. 项目目录结构
- project
 – .gradle:Gradle构建脚本目录;
 – app:主模块目录,存放应用程序的主要代码文件和资源文件,项目开发的核心区域;
 – build:编译,打包目录;
 – gradle:Gradle构建配置目录,包含 Gradle Wrapper 配置文件,用于自动化下载Gradle;
 – build.gradle :模块级构建脚本,用于配置依赖库、编译选项等,需根据项目需求调整;
 – settings.gradle:模块配置,指定项目包含的模块或子项目;
drawable目录通常位于项目的res文件夹中,用于存放应用中使用的图形资源。根据屏幕密度不同,可能包含以下子目录:
drawable-ldpi:低密度屏幕(如320 DPI)
drawable-mdpi:中等密度屏幕(如480 DPI)
drawable-hdpi:高密度屏幕(如640 DPI)
drawable-xhdpi:更高密度屏幕(如720 DPI)
drawable-xxhdpi:更高密度屏幕(如1080 DPI)
2. Activity生命周期

3. Activity语法
| 序号 | 语法 | 注释 | 
|---|---|---|
| 1 | setContentView() | 加载布局文件(如 XML 定义的界面)或动态创建视图,将内容展示在 Activity 窗口中,入参示例:R.layout.activity_main | 
| 2 | findViewById() | 根据ID查找标签,返回标签,入参是XML文件中设置的ID | 
| 3 | setText() | 标签设置文本的方法 | 
| 5 | Intent | 意图对象,有多个构造方法可以指定跳转视图 | 
| 6 | startActivity() | 触发入参的意图对象 | 
| 7 | setTextSize() | 设置文本大小,单位是sp(专门用来设置字体大小,关联系统字体大小) | 
| 8 | finish() | 结束当前Activity的生命周期并释放其资源 | 
| 8 | setVisibility(Int isVisible) | 是否可见,View.VISIBLE(可见),View.GONE(不可见) | 
Intent
(1)Intent组成部分
| 设置方法 | 注释 | 
|---|---|
| setComponent | 指定意图的来源和目标 | 
| setAction | 指定意图的动作 | 
| setData | Uri,指定动作要操作的数据路径 | 
| addCategory | 指定意图的操作类别 | 
| setType | 指定消息的数据类型 | 
| putExtras | 指定扩展信息 | 
| setFlags | 指定活动的启动标志 | 
(2)显式Intent:
 直接指定来源活动和目标活动,属于精确匹配
// 1. 构造方法中直接指定
Intent intent = new Intent(this, NextActivity.class);
// 2. 调用意图对象的setClass指定
Intent intent = new Intent();
intent.setClass(this, NextActivity.class);
// 3. 调用意图对象的setComponent方法指定
Intent intent = new Intent();
ComponentName component = new ComponentName(this, NextActivity.class);
intent.setComponent(component);
(3)隐式Intent:
| Intent类的系统动作常量名 | 常量值 | 注释 | 
|---|---|---|
| ACTION_MAIN | android.intent.action.MAIN | App启动入口 | 
| ACTION_VIEW | android.intent.action.VIEW | 向用户显示数据 | 
| ACTION_SEND | android.intent.action.SEND | 分享内容 | 
| ACTION_CALL | android.intent.action.CALL | 直接拨号 | 
| ACTION_DIAL | android.intent.action.DIAL | 准备拨号 | 
| ACTION_SENDTO | android.intent.action.SENDTO | 发送短信 | 
| ACTION_ANSWER | android.intent.action.ANSWER | 接听电话 | 
注意:使用隐式Intent跳转Activity时,目标Activity的android:exported属性要为true
(4)数据传递、接收
// SendActivity,向ReceiveActivity传递数据
intent.setClass(this,ReceiveActivity.class);
Bundle bundle = new Bundle();
bundle.putString("send_data","send_data");
intent.putExtras(bundle);
startActivity(intent);
// ReceiveActivity,接收SendActivity传递的数据
Bundle extras = getIntent().getExtras();
String send_data = extras.getString("send_data");
(5)结果反馈
// 发送请求的Activity
public class ActRequestActivity extends AppCompatActivity implements View.OnClickListener {
   
   
    private ActivityResultLauncher<Intent> register;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_act_request);
        // 按钮绑定点击事件
        findViewById(R.id.request_btn).setOnClickListener(this);
        // 接收响应
        register = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
   
   
            /**
             * 接收响应的方法
             * @param res
             */
            @Override
            public void onActivityResult(ActivityResult res) {
   
   
                // 响应状态码
                int resultCode = res.getResultCode();
                if(resultCode == Activity.RESULT_OK){
   
   
                	// 获取响应数据
                    Intent data = res.getData();
                    Bundle extras = data.getExtras();
                    String response = extras.getString("response");
                }
            }
        });
    }
    @Override
    public void onClick(View view) {
   
   
        Intent intent = new Intent();
        if(view.getId() == R.id.request_btn){
   
   
            intent.setClass(this,ActResponseActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("request_content","How are you?");
            intent.putExtras(bundle);
            // 跳转界面,并传递数据
            register.launch(intent);
        }
    }
}
// 返回响应的Activity
public class ActResponseActivity extends AppCompatActivity implements View.OnClickListener {
   
   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_act_response);
		// 按钮绑定点击事件
        findViewById(R.id.response_btn).setOnClickListener(this);
        // 获取传递来的消息
        Bundle extras = getIntent().getExtras();
        String requestContent = extras.getString("request_content");
    }
    @Override<
 
                   
                   
                   
                   最低0.47元/天 解锁文章
最低0.47元/天 解锁文章
                           
                       
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1306
					1306
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            