开启Android学习之旅-6-实战答题App

不经过实战,看再多理论,都是只放在笔记里,活学活用才是硬道理。同时开发应用需要循序渐进,一口气规划300个功能,400张表,会严重打击自己的自信。这里根据所学的,开发一个答题App。

开启Android学习之旅-6-实战答题App_第1张图片
开启Android学习之旅-6-实战答题App_第2张图片
开启Android学习之旅-6-实战答题App_第3张图片

题库需求分析

  1. 首页显示试卷列表;
  2. 点击试卷,开启计时,逐个显示该试卷的题目;
  3. 点击下一题,检测是否作答,未作答提示,已作答显示下一个,更新进度条显示;
  4. 最后一题,按钮显示“交卷”,作答完成,点击交卷,弹出成绩。

功能分析

  1. 首页试卷列表使用 recyclerview;
  2. 答题页面涉及进度条、卡片视图(cardview)、倒计时(CountDownTimer)
  3. 数据模型:Paper、Question。

开发

开发环境

Android Studio Giraffe | 2022.3.1 Patch 3
Android Gradle Plugin Version 8.1.3
Gradle Version 8.0
JDK 17
compileSdk: 33
targetSdk: 33
minSdk:26

  • 步骤1. 新建项目,这里选择的语言为kotlin。
    解决 gradle 卡顿问题:将 gradle/gradle-wrapper.properties 中的distributionUrl 替换为国内的:
distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.0-bin.zip

settings.gradle 国内镜像设置:

pluginManagement {
    repositories {
        maven { url 'https://mirrors.cloud.tencent.com/gradle/'}
        maven {
            url 'https://maven.aliyun.com/repository/google'
        }
        maven {
            url 'https://maven.aliyun.com/repository/jcenter'
        }
        maven {
            url "https://maven.aliyun.com/repository/public"
        }
        maven {
            url 'https://developer.huawei.com/repo/'
        }
        maven {
            url "https://jitpack.io"
        }
        google()
        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/jcenter'
        }
        maven {
            url "https://maven.aliyun.com/repository/public"
        }
        maven {
            url 'https://developer.huawei.com/repo/'
        }
        maven {
            url "https://jitpack.io"
        }
        google()
        mavenCentral()
    }
}

rootProject.name = "Exam"
include ':app'

开启 viewBinding 在 build.gradle 中添加

buildFeatures {
        viewBinding = true
    }
  • 步骤2:建模型:ExamModel,里面建数据类,PaperModel 和 QuestionModel;
package com.alex.exam

/**
 * @Author      : alex
 * @Date        : on 2024/1/6 16:59.
 * @Description :试卷模型
 */
data class PaperModel(
    val id : String,
    val title : String,
    val subtitle : String,
    val time : String,
    val questionList : List<QuestionModel>
){
    constructor() : this("","","","", emptyList())
}

data class QuestionModel(
    val question : String,
    val options : List<String>,
    val correct : String,
){
    constructor() : this ("", emptyList(),"")
}
  • 步骤3. 主题设置
    配色精美的主题是影响App评价的一个指标,这方面还是专业的人来干。这里只是参考别的,最简设置。
    配置主题色,有利于界面统一,减少在代码中写颜色。在 colors.xml 中先定义主题色、背景配色、操作成功提示配色、操作失败提示配色

<resources>
    <color name="black">#FF000000color>
    <color name="white">#FFFFFFFFcolor>
    <color name="blue">#1890ffcolor>
    <color name="gray">#F4F4F4color>
    <color name="green">#52C41Acolor>
    <color name="red">#FF4D4Fcolor>
resources>

再设置主题: