Android入门学习基础分享
一、Android开发核心基础认知
1.1 什么是Android原生开发?
Android原生开发指的是使用Google官方推荐的原生技术栈开发安卓应用,目前主流分为Java和Kotlin两种语言。本文全程采用Java语言,也是安卓入门最经典、生态最成熟的技术方案。原生开发的优势在于运行流畅、兼容性强、权限调用全面、适配所有安卓机型,是企业级安卓项目的主流开发方式。
我们日常使用的微信、抖音、淘宝等安卓APP,核心页面均基于原生开发实现。而我们入门阶段接触的所有页面、按钮、输入框、跳转功能,都是原生开发的基础核心能力。
1.2 核心概念:Activity(活动页面)
在Android开发中,Activity是安卓APP的核心页面载体,也是我们入门最需要掌握的组件。简单来说:我们手机屏幕上每一个独立的页面,都是一个Activity。
打开APP看到的首页、登录页、个人中心页、详情页,全部都是独立的Activity。一个APP可以包含多个Activity,而我们所说的页面跳转,本质就是从一个Activity切换到另一个Activity。
所有的页面展示、用户交互、数据传递,都围绕Activity展开,它是Android四大组件中使用频率最高、最基础的核心组件,也是我们本次学习的重点。
1.3 核心工具:Android Studio开发环境
Android Studio是Google官方唯一指定的安卓开发工具,集成了代码编写、编译、运行、调试、打包等所有功能。零基础入门无需掌握复杂配置,只需掌握基础使用即可:
1. 新建项目:选择Empty Views Activity模板,语言选择Java,最小SDK版本选择Android 7.0(兼容绝大多数机型);
2. 核心窗口:代码编辑区、日志控制台(Logcat)、预览窗口;
3. 运行方式:连接安卓真机或开启模拟器,点击运行按钮即可安装APP并测试功能。
1.4 安卓项目基础目录结构
1. java文件夹(核心代码区)
存放所有Java业务代码,我们创建的Activity页面、逻辑代码全部写在这里,是我们开发的核心工作区。默认会自动生成一个MainActivity(主页面,APP启动默认展示的页面)。
2. res文件夹(资源文件区)
存放所有页面资源,无需编写Java代码,主要包含:layout(页面布局文件,存放按钮、输入框等UI控件)、values(颜色、文字、尺寸配置)、图片资源等。我们的页面界面,全部在layout布局文件中绘制。
二、Android基础UI控件实操(页面交互基础)
页面跳转和数据传递的核心,是获取用户输入的内容,这就需要用到基础UI控件。入门阶段只需掌握输入框EditText、按钮Button、文本框TextView三个核心控件,即可完成本次实战功能。
2.1 三大核心控件作用
1. TextView:文本展示控件,用于展示固定文字、动态返回的文字信息;
2. EditText:输入框控件,用于接收用户手动输入的文字、账号、密码等数据;
3. Button:按钮控件,用于触发点击事件,比如点击跳转页面、点击提交数据。
2.2 布局基础:ConstraintLayout约束布局
目前Android官方主推的布局为ConstraintLayout(约束布局),也是企业项目通用布局,优势是适配多机型屏幕、布局层级简洁。
2.3 主页面布局实战(activity_main.xml)
我们首先编写主页面布局,实现「输入框+跳转按钮」的基础界面,用户可以在输入框填写内容,点击按钮跳转到第二个页面。以下是完整可运行的布局代码,附带详细注释:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="20dp" tools:context=".MainActivity"> <!-- 页面标题 --> <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="首页-数据传递演示" android:textSize="22sp" android:textStyle="bold" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"/> <!-- 用户输入框 --> <EditText android:id="@+id/et_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入要传递的内容" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/tv_title" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="30dp"/> <!-- 跳转按钮 --> <Button android:id="@+id/btn_jump" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="跳转到第二个页面" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/et_input" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="20dp"/> <!-- 展示回传数据的文本框 --> <TextView android:id="@+id/tv_back_data" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第二个页面回传数据:暂无" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/btn_jump" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="30dp"/> </androidx.constraintlayout.widget.ConstraintLayout>上述布局实现了完整的首页界面:标题展示、用户输入区域、页面跳转按钮、回传数据展示区域,完全满足本次实战需求。
三、Intent核心原理:页面跳转的核心载体
3.1 什么是Intent?
Intent是Android系统的通信信使,是页面跳转、数据传递的核心工具。简单来说:Android中所有的页面跳转、组件通信,全部依靠Intent实现。
如果把两个Activity页面比作两个房间,Intent就是连接两个房间的通道和信使,既可以实现从A房间走到B房间(页面跳转),也可以携带物品从A房间送到B房间(数据传递)。
3.2 Intent的两种跳转方式
3.2.1 显式Intent
直接指定跳转的目标Activity页面,精准跳转,是APP内部页面跳转的主流方式,我们本次的页面跳转全部使用显式Intent。优点是简单、精准、无适配问题,适合新手入门。
3.2.2 隐式Intent
不指定具体目标页面,通过动作、数据匹配系统或APP内页面,多用于调用系统功能(打开浏览器、拨号、打开相册),入门阶段无需深度掌握,了解概念即可。
3.3 Intent数据传递核心方法
Intent不仅能跳转页面,还能携带数据,核心依靠Bundle数据包实现:
1. putExtra():存储数据,将当前页面的数据存入Intent;
2. getIntent():获取跳转过来的Intent对象;
3. getStringExtra()/getIntExtra():取出对应类型的数据。
四、实战第一步:创建第二个页面(SecondActivity)
我们需要实现从MainActivity(首页)跳转到SecondActivity(二级页面),首先需要手动创建第二个Activity页面,新手严格按照步骤操作,避免报错。
4.1 新建SecondActivity页面
1. 在java业务包下,右键新建Activity → Empty Activity,命名为SecondActivity;
2. 自动生成对应的布局文件activity_second.xml,无需手动创建;
4.2 第二个页面布局编写(activity_second.xml)
第二个页面功能:接收首页传递的用户输入数据、提供输入框让用户填写回传内容、点击按钮返回首页并传递数据。完整布局代码如下:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="20dp" tools:context=".SecondActivity"> <!-- 页面标题 --> <TextView android:id="@+id/tv_second_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第二个页面-数据接收与回传" android:textSize="22sp" android:textStyle="bold" app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent"/> <!-- 展示上一页传递的数据 --> <TextView android:id="@+id/tv_receive_data" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="接收首页数据:暂无" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/tv_second_title" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="30dp"/> <!-- 回传数据输入框 --> <EditText android:id="@+id/et_back_input" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入要回传给首页的内容" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/tv_receive_data" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="20dp"/> <!-- 返回并传值按钮 --> <Button android:id="@+id/btn_back" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="返回首页并传递数据" android:textSize="16sp" app:layout_constraintTop_toBottomOf="@id/et_back_input" app:layout_constraintStart_toStartOf="parent" android:layout_marginTop="20dp"/> </androidx.constraintlayout.widget.ConstraintLayout>五、核心实战1:页面跳转 + 向下传递用户输入数据
完成布局搭建后,我们开始编写Java逻辑代码,实现核心功能:获取首页用户输入的内容,通过Intent携带数据,跳转到第二个页面并展示数据。
5.1 MainActivity核心逻辑代码
在首页Activity中,绑定布局控件、设置按钮点击事件、获取输入框内容、通过Intent传递数据,完整代码如下:
import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { // 声明控件 private EditText etInput; private Button btnJump; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 绑定布局文件 setContentView(R.layout.activity_main); // 初始化控件,关联布局ID etInput = findViewById(R.id.et_input); btnJump = findViewById(R.id.btn_jump); // 设置按钮点击跳转事件 btnJump.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 1. 获取用户输入的内容,去除首尾空格 String inputData = etInput.getText().toString().trim(); // 2. 创建Intent对象,显式跳转到SecondActivity Intent intent = new Intent(MainActivity.this, SecondActivity.class); // 3. 携带数据,参数1:键名(自定义),参数2:传递的数据 intent.putExtra("send_data", inputData); // 4. 启动跳转 startActivity(intent); } }); } }5.2 SecondActivity接收并展示数据
在第二个页面中,获取Intent携带的上一页数据,并展示在文本控件上,完成数据向下传递闭环,代码如下:
import android.content.Intent; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class SecondActivity extends AppCompatActivity { private TextView tvReceiveData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // 初始化控件 tvReceiveData = findViewById(R.id.tv_receive_data); // 1. 获取跳转过来的Intent对象 Intent intent = getIntent(); // 2. 根据键名获取传递的数据,默认值为空 String receiveData = intent.getStringExtra("send_data"); // 3. 将接收的数据展示到页面 tvReceiveData.setText("接收首页数据:" + receiveData); } }六、核心实战2:页面返回 + 数据回传
上面实现了「首页→二级页面」的单向数据传递,而实际开发中更常用的是数据回传:二级页面操作后,将新数据返回给首页。Android官方推荐使用registerForActivityResult实现页面数据回传,替代老旧废弃的startActivityForResult,是目前最新、最规范的写法。
6.1 实现逻辑梳理
1. 首页通过registerForActivityResult开启跳转监听,等待二级页面回传数据;
2. 二级页面获取用户新的输入内容,封装到Intent中;
3. 二级页面关闭自身,将Intent数据回传给首页;
4. 首页接收数据并展示到页面。
6.2 改造MainActivity:开启回传监听
修改首页代码,新增数据回传回调,监听二级页面返回的数据,完整改造后代码如下:
import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.activity.result.ActivityResult; import androidx.activity.result.ActivityResultCallback; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private EditText etInput; private Button btnJump; private TextView tvBackData; // 声明页面跳转监听发射器 private ActivityResultLauncher<Intent> resultLauncher; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化所有控件 etInput = findViewById(R.id.et_input); btnJump = findViewById(R.id.btn_jump); tvBackData = findViewById(R.id.tv_back_data); // 注册页面回传监听 registerResult(); // 跳转按钮点击事件 btnJump.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String inputData = etInput.getText().toString().trim(); Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.putExtra("send_data", inputData); // 使用监听发射器跳转,替代普通startActivity resultLauncher.launch(intent); } }); } // 注册数据回传监听方法 private void registerResult() { resultLauncher = registerForActivityResult( new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { // 判断页面返回状态是否成功 if (result.getResultCode() == RESULT_OK) { // 获取回传的Intent数据 Intent data = result.getData(); if (data != null) { // 取出回传数据 String backData = data.getStringExtra("back_data"); // 展示回传数据 tvBackData.setText("第二个页面回传数据:" + backData); } } } }); } }6.3 改造SecondActivity:实现数据回传
修改二级页面代码,绑定回传按钮、获取用户输入的回传内容、封装数据并返回首页,完整代码如下:
import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class SecondActivity extends AppCompatActivity { private TextView tvReceiveData; private EditText etBackInput; private Button btnBack; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); // 初始化控件 tvReceiveData = findViewById(R.id.tv_receive_data); etBackInput = findViewById(R.id.et_back_input); btnBack = findViewById(R.id.btn_back); // 接收首页传递的数据并展示 Intent intent = getIntent(); String receiveData = intent.getStringExtra("send_data"); tvReceiveData.setText("接收首页数据:" + receiveData); // 返回按钮点击事件,回传数据 btnBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 获取用户输入的回传内容 String backData = etBackInput.getText().toString().trim(); // 创建Intent封装回传数据 Intent backIntent = new Intent(); backIntent.putExtra("back_data", backData); // 设置返回结果为成功,携带数据 setResult(RESULT_OK, backIntent); // 关闭当前页面,返回首页 finish(); } }); } }七、完整功能测试与流程总结
7.1 完整运行流程
1. 打开APP,进入首页,在输入框填写内容(如:Hello Android);
2. 点击跳转按钮,进入第二个页面,页面自动展示首页传递的内容;
3. 在第二个页面输入框填写回传内容(如:数据接收成功);
4. 点击返回按钮,自动关闭二级页面,回到首页;
5. 首页底部文本框自动展示二级页面回传的内容,功能全部实现。
7.2 核心流程闭环总结
首页输入数据 → Intent携带数据跳转 → 二级页面接收展示数据 → 二级页面输入回传数据 → 封装数据返回 → 首页接收展示回传数据,完成双向数据传递+页面跳转完整闭环。
八、高频易错点详解
8.1 数据获取为空问题
这是新手最常遇到的问题,核心原因:Intent传值和取值的键名不一致,大小写、文字必须完全统一,建议统一常量管理键名,避免手写出错。
8.2 控件空指针报错
报错原因:未初始化控件、控件ID和布局ID不匹配、在setContentView之前初始化控件。解决规范:先绑定布局,再初始化控件,保证ID一一对应。
8. 3 回传数据不生效问题
1. 未使用resultLauncher跳转,依旧使用普通startActivity;
2. 未设置setResult(RESULT_OK),系统无法识别返回成功;
3. 未调用finish()关闭当前页面,数据无法回传。
结语
本文核心不在于死记代码,而在于理解逻辑。页面跳转和数据传递是安卓开发的第一道门槛,也是所有交互功能的基础。从零基础搭建页面、编写控件、实现单向传值、再到双向数据回传,整个流程完整覆盖了入门的核心需求。
