Android入门学习基础分享

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 version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/android xmlns:apphttp://schemas.android.com/apk/res-auto xmlns:toolshttp://schemas.android.com/tools android:layout_widthmatch_parent android:layout_heightmatch_parent android:padding20dp tools:context.MainActivity !-- 页面标题 -- TextView android:idid/tv_title android:layout_widthwrap_content android:layout_heightwrap_content android:text首页-数据传递演示 android:textSize22sp android:textStylebold app:layout_constraintTop_toTopOfparent app:layout_constraintStart_toStartOfparent/ !-- 用户输入框 -- EditText android:idid/et_input android:layout_widthmatch_parent android:layout_heightwrap_content android:hint请输入要传递的内容 android:textSize16sp app:layout_constraintTop_toBottomOfid/tv_title app:layout_constraintStart_toStartOfparent android:layout_marginTop30dp/ !-- 跳转按钮 -- Button android:idid/btn_jump android:layout_widthmatch_parent android:layout_heightwrap_content android:text跳转到第二个页面 android:textSize16sp app:layout_constraintTop_toBottomOfid/et_input app:layout_constraintStart_toStartOfparent android:layout_marginTop20dp/ !-- 展示回传数据的文本框 -- TextView android:idid/tv_back_data android:layout_widthwrap_content android:layout_heightwrap_content android:text第二个页面回传数据暂无 android:textSize16sp app:layout_constraintTop_toBottomOfid/btn_jump app:layout_constraintStart_toStartOfparent android:layout_marginTop30dp/ /androidx.constraintlayout.widget.ConstraintLayout上述布局实现了完整的首页界面标题展示、用户输入区域、页面跳转按钮、回传数据展示区域完全满足本次实战需求。三、Intent核心原理页面跳转的核心载体3.1 什么是IntentIntent是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()存储数据将当前页面的数据存入Intent2. getIntent()获取跳转过来的Intent对象3. getStringExtra()/getIntExtra()取出对应类型的数据。四、实战第一步创建第二个页面SecondActivity我们需要实现从MainActivity首页跳转到SecondActivity二级页面首先需要手动创建第二个Activity页面新手严格按照步骤操作避免报错。4.1 新建SecondActivity页面1. 在java业务包下右键新建Activity → Empty Activity命名为SecondActivity2. 自动生成对应的布局文件activity_second.xml无需手动创建4.2 第二个页面布局编写activity_second.xml第二个页面功能接收首页传递的用户输入数据、提供输入框让用户填写回传内容、点击按钮返回首页并传递数据。完整布局代码如下?xml version1.0 encodingutf-8? androidx.constraintlayout.widget.ConstraintLayout xmlns:androidhttp://schemas.android.com/apk/res/android xmlns:apphttp://schemas.android.com/apk/res-auto xmlns:toolshttp://schemas.android.com/tools android:layout_widthmatch_parent android:layout_heightmatch_parent android:padding20dp tools:context.SecondActivity !-- 页面标题 -- TextView android:idid/tv_second_title android:layout_widthwrap_content android:layout_heightwrap_content android:text第二个页面-数据接收与回传 android:textSize22sp android:textStylebold app:layout_constraintTop_toTopOfparent app:layout_constraintStart_toStartOfparent/ !-- 展示上一页传递的数据 -- TextView android:idid/tv_receive_data android:layout_widthwrap_content android:layout_heightwrap_content android:text接收首页数据暂无 android:textSize16sp app:layout_constraintTop_toBottomOfid/tv_second_title app:layout_constraintStart_toStartOfparent android:layout_marginTop30dp/ !-- 回传数据输入框 -- EditText android:idid/et_back_input android:layout_widthmatch_parent android:layout_heightwrap_content android:hint请输入要回传给首页的内容 android:textSize16sp app:layout_constraintTop_toBottomOfid/tv_receive_data app:layout_constraintStart_toStartOfparent android:layout_marginTop20dp/ !-- 返回并传值按钮 -- Button android:idid/btn_back android:layout_widthmatch_parent android:layout_heightwrap_content android:text返回首页并传递数据 android:textSize16sp app:layout_constraintTop_toBottomOfid/et_back_input app:layout_constraintStart_toStartOfparent android:layout_marginTop20dp/ /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 ActivityResultLauncherIntent 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 ActivityResultCallbackActivityResult() { 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 Android2. 点击跳转按钮进入第二个页面页面自动展示首页传递的内容3. 在第二个页面输入框填写回传内容如数据接收成功4. 点击返回按钮自动关闭二级页面回到首页5. 首页底部文本框自动展示二级页面回传的内容功能全部实现。7.2 核心流程闭环总结首页输入数据 → Intent携带数据跳转 → 二级页面接收展示数据 → 二级页面输入回传数据 → 封装数据返回 → 首页接收展示回传数据完成双向数据传递页面跳转完整闭环。八、高频易错点详解8.1 数据获取为空问题这是新手最常遇到的问题核心原因Intent传值和取值的键名不一致大小写、文字必须完全统一建议统一常量管理键名避免手写出错。8.2 控件空指针报错报错原因未初始化控件、控件ID和布局ID不匹配、在setContentView之前初始化控件。解决规范先绑定布局再初始化控件保证ID一一对应。8. 3 回传数据不生效问题1. 未使用resultLauncher跳转依旧使用普通startActivity2. 未设置setResult(RESULT_OK)系统无法识别返回成功3. 未调用finish()关闭当前页面数据无法回传。结语本文核心不在于死记代码而在于理解逻辑。页面跳转和数据传递是安卓开发的第一道门槛也是所有交互功能的基础。从零基础搭建页面、编写控件、实现单向传值、再到双向数据回传整个流程完整覆盖了入门的核心需求。