杰瑞科技汇

Android 5.0教程怎么学?新手入门看这里!

这份教程将从 新特性概览核心开发概念实践代码示例 三个部分展开。

Android 5.0教程怎么学?新手入门看这里!-图1
(图片来源网络,侵删)

第一部分:Android 5.0 (Lollipop) 新特性概览

Android 5.0 带来了自 Android 4.0 以来最大的一次设计语言和系统架构的革新,其核心主题是 “Material Design”

1. Material Design (设计语言)

这是 Android 5.0 最重要的变化,它是一套全新的、跨平台的设计规范,旨在创造一个视觉、交互和反馈都更加统一、有层次感的世界。

  • 核心概念:
    • 物质: UI 元素不再是扁平的,而是像一张张纸片(Z轴),它们有厚度、阴影和边界,可以堆叠、移动。
    • 阴影: 通过阴影的深浅和大小来暗示元素之间的层级关系,越“高”的元素,阴影越大、越柔和。
    • 动画: 动画不再是简单的淡入淡出,而是有物理意义的,一个按钮被按下时,会有涟漪效果;页面切换时,元素会平滑地移动和变形,而不是瞬间跳转。
    • 网格: 布局基于一个 8dp 的网格系统,确保了元素的对齐和间距的统一性。

2. 用户体验 重大更新

  • 通知系统: 这是 Android 5.0 另一个革命性的改变。

    • 锁屏通知: 重要的通知可以直接显示在锁屏上,用户无需解锁即可查看和快速操作(如回复短信、接听电话)。
    • 通知优先级: 通知被分为不同优先级(高、中、低),高优先级的通知会弹出 Heads-up 通知(一个悬浮在屏幕顶部的半透明窗口),用户可以即时处理,稍后它也会进入通知栏。
    • 通知渠道: 后续版本(Android 8.0)才正式引入,但 5.0 的通知分组和操作按钮为这一概念奠定了基础。
  • 多任务界面: 按下“最近任务”按钮后,不再是简单的应用缩略图列表,而是以卡片堆叠的形式展示,每个卡片都包含了该应用的状态,用户可以左右滑动来切换。

    Android 5.0教程怎么学?新手入门看这里!-图2
    (图片来源网络,侵删)
  • 性能与电池优化:

    • ART 运行时: Android 5.0 默认用 ART (Android Runtime) 取代了旧的 Dalvik,ART 在应用安装时进行预编译(AOT, Ahead-Of-Time),将代码编译成机器码,这极大地提升了应用的运行速度、减少了卡顿,并降低了内存占用。
    • Project Volta: 一系列旨在提升电池续航的技术,包括“JobScheduler” API,允许应用在系统认为合适的时机(如充电、连接WiFi)批量执行任务,从而减少不必要的唤醒。

3. 开发者 API 新特性

  • Material Design 组件: 提供了一系列符合新设计规范的控件和主题,如 FloatingActionButton, Snackbar, CardView, RecyclerView 等。
  • 新控件:
    • RecyclerView: 用于高效显示滚动列表的控件,是 ListView 的超级升级,它通过复用视图项,极大地提升了长列表的性能。
    • CardView: 一个可以添加圆角和阴影的 FrameLayout,是实现 Material Design 卡片效果的利器。
    • Snackbar: 提供轻量级反馈的控件,它从屏幕底部滑入,几秒后自动消失,比 Toast 更灵活,可以包含一个操作按钮。
  • 色彩系统: 引入了新的颜色资源类型,如 ?attr/colorPrimary, ?attr/colorPrimaryDark, ?attr/colorAccent,让主题定制变得非常简单。
  • JobScheduler API: 如上所述,用于优化后台任务执行,提升电池续航。

第二部分:核心开发概念与实践

1. 设置项目环境

  1. 安装 Android Studio: 这是 Google 官方推荐的 IDE。
  2. 创建新项目:
    • 打开 Android Studio,选择 "Start a new Android Studio project"。
    • 选择 "Empty Activity" 模板。
    • 在 "Configure your project" 界面,将 Minimum SDK 设置为 API 21: Android 5.0 (Lollipop),这表示你的应用最低将支持 Android 5.0 系统。
    • 完成创建。

2. 应用 Material Design 主题

为了让你的应用看起来像 Android 5.0 的原生应用,你需要修改 res/values/styles.xmlres/values-v21/styles.xml 文件。

res/values/styles.xml (适用于所有版本, 包括 5.0)

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

res/values-v21/styles.xml (仅适用于 API 21 及以上, 即 Android 5.0+)

Android 5.0教程怎么学?新手入门看这里!-图3
(图片来源网络,侵删)

这个文件会覆盖 values/styles.xml 中的设置,从而启用 Material Design 的特有功能,如状态栏颜色。

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- 在 Android 5.0+ 上,将状态栏颜色设置为 colorPrimaryDark -->
        <item name="android:windowContentTransitions">true</item>
        <item name="android:windowAllowEnterTransitionOverlap">true</item>
        <item name="android:windowAllowReturnTransitionOverlap">true</item>
        <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
        <item name="android:windowSharedElementExitTransition">@android:transition/move</item>
    </style>
</resources>

3. 使用 Material Design 控件

示例 1: 使用 CardView 和 RecyclerView

res/layout/activity_main.xml

<androidx.recyclerview.widget.RecyclerView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/my_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scrollbars="vertical" />

res/layout/list_item.xml (列表项的布局)

<androidx.cardview.widget.CardView
    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="wrap_content"
    android:layout_margin="8dp"
    app:cardCornerRadius="8dp"
    app:cardElevation="4dp">
    <TextView
        android:id="@+id/text_view_item"
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:gravity="center"
        android:text="Item Text"
        android:textSize="20sp" />
</androidx.cardview.widget.CardView>

MainActivity.java

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
    private RecyclerView mRecyclerView;
    private MyAdapter mAdapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView = findViewById(R.id.my_recycler_view);
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        // 准备数据
        List<String> myData = new ArrayList<>();
        for (int i = 0; i < 30; i++) {
            myData.add("Item " + (i + 1));
        }
        // 创建并设置适配器
        mAdapter = new MyAdapter(myData);
        mRecyclerView.setAdapter(mAdapter);
    }
}

MyAdapter.java (自定义 RecyclerView 适配器)

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
    private List<String> mData;
    public MyAdapter(List<String> data) {
        this.mData = data;
    }
    // 创建新的ViewHolder
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.list_item, parent, false);
        return new MyViewHolder(view);
    }
    // 绑定数据到ViewHolder
    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.textView.setText(mData.get(position));
    }
    // 返回数据总数
    @Override
    public int getItemCount() {
        return mData.size();
    }
    // 自定义ViewHolder
    public static class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView textView;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.text_view_item);
        }
    }
}

示例 2: 使用 Snackbar

MainActivity.javaonCreate 方法中添加:

// 在 onCreate 方法末尾添加
findViewById(R.id.my_recycler_view).post(() -> {
    androidx.appcompat.widget.Snackbar.make(
            findViewById(R.id.my_recycler_view),
            "这是一个 Snackbar!",
            androidx.appcompat.widget.Snackbar.LENGTH_SHORT
    ).setAction("点击", v -> {
        // 点击 "点击" 按钮后执行的逻辑
        androidx.appcompat.widget.Snackbar.make(
                findViewById(R.id.my_recycler_view),
                "你点击了按钮!",
                androidx.appcompat.widget.Snackbar.LENGTH_SHORT
        ).show();
    }).show();
});

(注意:在旧版 Android Studio 中,Snackbar 可能是 android.support.design.widget.Snackbar,但现在推荐使用 AndroidX 库中的版本)


第三部分:重要注意事项与后续发展

1. 维护旧版应用的注意事项

如果你现在需要维护一个基于 Android 5.0 的旧应用,

  • 安全风险: Android 5.0 已停止安全更新,存在已知的安全漏洞,应尽快引导用户升级到更新的系统版本。
  • API 废弃: 许多在 5.0 中引入的 API(如部分通知相关的)在后续版本中被更优的 API 替代,在升级应用时,需要仔细处理这些废弃 API。
  • ART 兼容性: 如果你的应用需要兼容 Android 5.0 之前的版本(使用 Dalvik),你需要确保代码在两种运行时下都能正常工作。

2. Android 5.0 之后的发展

  • Android 6.0 (Marshmallow, 2025): 引入了运行时权限、Doze 模式(更深度省电)和指纹识别支持。
  • Android 7.0 (Nougat, 2025): 引入了多窗口模式、通知渠道和 Java 8 语言特性支持。
  • Android 8.0 (Oreo, 2025): 强制了后台执行限制、引入了官方的通知渠道、画中画模式等。
  • Android 10 (2025): 取消了版本命名(甜品名),专注于隐私、安全和5G。

Android 5.0 Lollipop 是一个里程碑式的版本,它通过 Material Design 彻底改变了 Android 的视觉语言,并通过 ART 运行时改进的通知系统 大幅提升了用户体验和系统性能,对于开发者来说,学习 Android 5.0 意味着掌握了现代 Android 应用的设计基石,如 RecyclerViewSnackbar 等组件至今仍在广泛使用,虽然它已成为历史,但其设计理念和技术遗产深刻地影响了整个 Android 生态系统。

分享:
扫描分享到社交APP
上一篇
下一篇