Android 基础(一)
文章目录
活动Activity
acticity是一个包含用户界面的组件
在项目中的任何活动都应该重写它的onCreate()
方法,我们需要在这个函数中加入自己的逻辑。
public class FirstActivity extends Activity{
@override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savaInstanceState);
}
}
活动Activity的生命周期
Activity 是 Android 应用程序中的核心组件之一,它具有丰富的生命周期方法,包括以下几个关键阶段:
- 创建阶段:
onCreate()
:在活动首次创建时调用。在此方法中进行初始化操作,例如设置布局、绑定数据等。
- 启动阶段:
onStart()
:在活动从不可见状态变为可见状态时调用。在此方法中执行活动的开始操作,例如加载数据、注册广播接收器等。onResume()
:在活动获得焦点并与用户进行交互时调用。在此方法中开始处理用户输入、启动动画效果等。
- 暂停阶段:
onPause()
:在活动失去焦点但仍然可见时调用。在此方法中暂停正在执行的操作,例如保存数据、释放资源等。
- 停止阶段:
onStop()
:在活动完全不可见时调用。在此方法中停止不再需要的操作,例如停止动画、注销广播接收器等。
- 重启阶段:
onRestart()
:在活动由停止状态重新启动时调用。在此方法中执行重新启动后的操作,例如重新加载数据、恢复界面状态等。
- 销毁阶段:
onDestroy()
:在活动被销毁之前调用。在此方法中进行清理操作,例如释放资源、取消注册等。
此外,还有一些其他生命周期方法用于处理特定情况的回调:
onSaveInstanceState()
:在活动被销毁之前调用,用于保存临时状态数据,以便在活动重新创建时恢复。onRestoreInstanceState()
:在活动重新创建时调用,用于恢复之前保存的临时状态数据。
活动Activity的启动模式
活动的启动模式决定了系统如何创建和管理活动实例,以及如何处理活动之间的导航和交互。Android 提供了以下四种常用的活动启动模式:
- Standard(标准模式):
- 默认启动模式。
- 每次启动活动都会创建一个新的活动实例,不管该活动是否已经存在于任务栈中。
- 活动可以重复启动、多次实例化。
- SingleTop(单顶模式):
- 如果新启动的活动位于任务栈的顶部,则不会创建新的活动实例,而是直接调用现有的活动实例的
onNewIntent()
方法传递新的 Intent。 - 如果新启动的活动不在任务栈的顶部,系统会创建新的活动实例。
- 适用于需要频繁切换到同一活动的场景,避免创建多个相同的活动实例。
- 如果新启动的活动位于任务栈的顶部,则不会创建新的活动实例,而是直接调用现有的活动实例的
- SingleTask(单任务模式):
- 在一个任务栈内只能存在一个该活动的实例,无论是通过新的 Intent 启动还是从其他活动返回。
- 如果启动活动时已存在该任务栈,则系统会将该任务栈调至前台,并调用现有活动实例的
onNewIntent()
方法传递新的 Intent。 - 如果任务栈中不存在该活动实例,则会创建新的任务栈并在其中创建新的活动实例。
- 适用于作为应用程序入口的主活动或具有独立功能的活动。
- SingleInstance(单实例模式):
- 在一个独立的任务栈内只能存在一个该活动的实例,且该任务栈与其他任务栈完全隔离。
- 启动该活动时,系统会创建一个新的任务栈,并在其中创建该活动的实例。这个任务栈将独占屏幕空间。
- 适用于具有独立性很强的活动,如应用程序间的共享组件或系统级别的设置界面。
可以通过在 AndroidManifest.xml 文件中的 <activity>
元素中使用 android:launchMode
属性来指定活动的启动模式。例如:
<activity
android:name=".MyActivity"
android:launchMode="singleTop">
...
</activity>
不同的启动模式可以根据具体需求来选择,灵活运用可以实现不同的活动交互和导航效果。
AndroidManifest
AndroidManifest.xml是每个Android应用程序中必不可少的配置文件,用于描述应用程序的各种属性信息:应用信息、权限、组件(activity、service、receiver和provider)、应用程序要求的最低API级别等等。
以下是AndroidManifest.xml文件的主要内容及其作用:
- package:应用程序的包名,一般由公司域名+应用名构成,保证唯一性。
- android:versionCode:应用程序的版本号,用来区分不同版本。
- android:versionName:应用程序的版本名称,用来展示给用户。
- uses-sdk:声明应用程序所需的最低API级别和目标API级别。可以通过它来指定支持的设备和操作系统版本。
- uses-permission:声明应用程序所需的权限,例如读取SD卡或者使用相机等。
- application:该标签内部声明了应用程序的核心组件,包括Activity、Service、BroadcastReceiver和ContentProvider。
- activity:Android应用中的一种关键组件,用于展示用户界面。每一个Activity都包含一个布局文件,并在onCreate()方法中加载该布局文件。可以通过Intent启动其他Activity。所有的acticity都需要在AndroidManifest.xml文件中进行注册才能生效。
- service:服务组件用于在后台执行长时间运行的任务,比如下载文件或者播放音乐等。
- receiver:广播接收器组件用于接收特定事件的广播消息,比如设备启动完成或者拍照完成等。
- provider:内容提供器用于在应用程序之间共享数据,例如手机联系人信息或者短信记录等。
Layout
布局,用来显示界面的信息,一般放在res/layout文件下,通过创建xml文件来绘制界面
XML(可扩展标记语言)是一种用于描述数据结构的标记语言,常被用于定义和组织布局、配置文件和数据传输等方面。在移动应用开发中,XML文件通常用于定义Android应用的布局。
xml文件包括一些常用的布局(其中最常见的还是LinearLayout和RelativeLayout,布局之间可以嵌套使用)
1.LinearLayout(线性布局):线性布局是最简单的布局之一,它按照水平或垂直方向依次排列子视图。可以设置子视图的权重来控制在空间分配上的比例。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- 子视图 -->
</LinearLayout>
2.RelativeLayout(相对布局):相对布局允许子视图在父视图中相对位置,并可以根据其他视图进行定位。
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 子视图 -->
</RelativeLayout>
3.FrameLayout(帧布局):帧布局允许子视图在屏幕上重叠显示,通常用于静态页面或者只包含一个子视图的情况。
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 子视图 -->
</FrameLayout>
4.ConstraintLayout(约束布局):约束布局通过定义视图之间的约束关系来定位和对齐子视图,强大而灵活。
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 子视图 -->
</androidx.constraintlayout.widget.ConstraintLayout>
5.GridLayout(网格布局):以行和列的方式排列子元素。可以设置每个单元格的大小,并支持合并单元格。
6.TableLayout(表格布局):以表格形式排列子元素。可以指定每个单元格的位置,并支持跨行或跨列的布局。
7.CoordinatorLayout(协调布局):用于实现一个可交互的布局,能够响应用户的手势操作。
8.ScrollView (滚动布局):是用于包装可滚动视图的结构。它可以嵌套在布局中,使布局中的视图可以在滚动时被完全显示。ScrollView 通常用于包含列表、表格或其他需要滚动的内容的布局中。
常用控件
一些常用的控件:
- TextView:显示文本内容的控件,支持多种样式和排版方式。
- Button:触发点击事件的控件,通常用于执行某个操作或跳转到另一个界面。
- ImageView:显示图片的控件,支持多种图片格式和加载方式。
- EditText:允许用户输入文本内容的控件,支持多种输入类型和格式限制。
- ListView:在列表中显示一组数据的控件,支持滚动展示和自定义布局样式。
- RecyclerView:类似ListView,但是支持更复杂的布局和交互效果,性能也更好。
- Spinner:显示一组选项的下拉菜单控件,支持自定义选项和样式。
- CheckBox:表示二选一的复选框控件,可用于选择一个或多个选项。
- RadioButton:表示单选的单选框控件,只能选择其中一个选项。
- Switch:开关控件,用于表示打开或关闭某个功能或状态。
- ProgressBar:进度条控件,用于表示任务的完成情况或操作的进度。
- SeekBar:滑动条控件,允许用户通过滑动来调整数值或进度。
- DatePicker:日期选择器控件,允许用户选择日期。
- TimePicker:时间选择器控件,允许用户选择时间。
- WebView:显示Web页面的控件,可以加载网页、本地HTML文件或其他网络资源。
它们有一些公共属性:
- android:id:控件唯一标识符,用于在代码中引用该控件。
- android:layout_width和android:layout_height:控件的宽度和高度,可以使用具体的数值、wrap_content(根据控件内容自适应大小)或match_parent(尽可能填满父容器)。
- android:layout_margin:控件与周围其他控件或边界之间的空白距离。
- android:layout_gravity:控件在布局中的位置,例如居中、左对齐、右对齐等等。
- android:background:控件的背景色或背景图片,可以使用颜色值或drawable。
- android:textColor:控件文本的颜色。
- android:textSize:控件文本的字体大小。
- android:padding:控件内部文本或图像与控件边界之间的空白距离。
- android:onClick:控件被点击时触发的方法名称。
- android:visibility:控件的可见性,可以设置为visible(可见)、invisible(不可见但仍占用空间)或gone(不可见且不占用空间)。
Toast
Toast是Android开发中一种简单的提示框,用于向用户显示短暂的信息或提醒。它以类似吐司(Toast)的形式弹出来,显示一段文字,并在一定时间后自动消失。
以下是Toast的详细介绍:
- 显示位置:Toast可以在屏幕的不同位置显示,包括顶部、中间和底部,默认情况下会显示在屏幕底部。
- 显示时长:Toast可以设置显示的时长,通常有三个选项:
- Toast.LENGTH_SHORT:短时间显示(约2秒钟)
- Toast.LENGTH_LONG:长时间显示(约3.5秒钟)
- 自定义时长:可以通过调整代码来设置显示的时长。
- 创建Toast对象:可以通过Toast类的构造方法创建一个Toast对象。
- 设置文本和图标:可以通过setText()方法设置要显示的文本内容,并通过setIcon()方法设置显示的图标。
- 显示Toast:通过调用show()方法,将Toast显示在屏幕上。
下面是一个示例代码,演示了如何创建和显示一个简单的Toast:
// 创建一个Toast对象
Toast toast = Toast.makeText(context, "Hello, Toast!", Toast.LENGTH_SHORT);
// 设置文本和图标
toast.setText("Hello, Toast!");
toast.setIcon(R.drawable.icon_toast);
// 显示Toast
toast.show();
值得注意的是,可以在任何线程中调用Toast的相关方法,Toast都会在内部自动处理线程切换,确保在主线程上显示提示框。这样,你就无需担心在非主线程中使用Toast导致的问题。
实现页面跳转(Intent)
Intent 是 Android 中用于在组件之间进行通信的对象。它可以用于启动活动(Activity)或服务(Service),传递数据,以及执行其他各种操作。
通过 Intent,您可以实现页面之间的跳转。以下是使用 Intent 实现页面跳转的基本步骤:
-
创建 Intent 对象:使用构造函数创建一个新的 Intent 对象。在构造函数中指定上下文(通常是当前活动或应用程序的上下文)和目标活动的类名。
Intent intent = new Intent(context, TargetActivity.class);
-
可选:传递数据(可选):如果需要将数据传递给目标活动,可以使用 Intent 的
putExtra()
方法添加键值对。intent.putExtra("key", value);
-
启动活动:使用上下文调用
startActivity()
来启动目标活动。context.startActivity(intent);
完整的示例代码如下所示:
// 在当前活动中创建 Intent 对象
Intent intent = new Intent(MainActivity.this, TargetActivity.class);
// 可选:传递数据
intent.putExtra("key", value);
// 启动目标活动
startActivity(intent);
在目标活动(TargetActivity)中,您可以通过 getIntent()
方法获取传递的数据,例如:
Intent intent = getIntent();
String value = intent.getStringExtra("key");
上述示例用于启动另一个活动,但 Intent 还有其他用途,比如启动服务、发送广播、打开网页等。Intent 提供了灵活的方式来实现 Android 组件之间的交互和通信。
在 Android 中,Intent 用于在应用程序组件之间传递信息和执行各种操作。根据使用方式的不同,Intent 可以分为显式 Intent 和隐式 Intent。
显式 Intent 是指明确指定目标组件名称(通常是活动或服务)的 Intent。例如:
Intent intent = new Intent(context, TargetActivity.class);
startActivity(intent);
在上述代码中,Intent 明确指定了目标活动的类名 TargetActivity.class
,因此被称为显式 Intent。显式 Intent 常用于应用程序内部的组件之间的交互,因为它可以准确地指定要启动的目标组件。
隐式 Intent 则没有指定明确的组件名称,而是通过指定操作、类别、数据等属性来描述要执行的操作并由系统查找最佳匹配的组件来处理该 Intent。例如:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.example.com"));
startActivity(intent);
在上述代码中,Intent 指定了操作 Intent.ACTION_VIEW
和数据 http://www.example.com
,但没有指定目标组件。系统会查找能够处理该 Intent 的最佳匹配组件,并启动它(例如浏览器应用程序)。这就是隐式 Intent 的工作方式。
显式 Intent 和隐式 Intent 的主要区别在于是否明确指定要启动的目标组件。显式 Intent 更直观、更精确,适用于应用程序内部组件之间的交互;而隐式 Intent 更灵活、更通用,适用于与其他应用程序或系统组件之间的交互
tartActivity(intent);
在上述代码中,Intent 指定了操作 Intent.ACTION_VIEW
和数据 http://www.example.com
,但没有指定目标组件。系统会查找能够处理该 Intent 的最佳匹配组件,并启动它(例如浏览器应用程序)。这就是隐式 Intent 的工作方式。
显式 Intent 和隐式 Intent 的主要区别在于是否明确指定要启动的目标组件。显式 Intent 更直观、更精确,适用于应用程序内部组件之间的交互;而隐式 Intent 更灵活、更通用,适用于与其他应用程序或系统组件之间的交互
下一篇:Android基础(二)