GeoQuiz项目总结

通过学习Android基本概念与构成应用的基本组件,来开发一个叫GeoQuiz的应用。该应用的用途是测试用户的地理知识。用户单击TRUE或FALSE按钮来回答屏幕上的问题,GeoQuiz可即时反馈答案正确与否。

开发前的准备工作

想要开发一个Android应用,首先要在电脑上装上开发软件。在这里推荐Android Studio,本文所有的开发都是在该平台上进行的。

Android Studio的安装包括:

1.Android SDK

最新版本的Android SDK。

2.Android SDK工具和平台工具

用来测试与调试应用的一套工具。

3.Android模拟器系统镜像

用来在不同虚拟设备上开发测试应用。

下载与安装

可以从Android开发者网站下载Android Studio:https://developer.android.com/sdk/
首次安装的话,你还需要从http://www.oracle.com下载并安装Java开发者套件(JDK7)。
如仍有安装问题,请访问网址https://developer.android.com/sdk/寻求帮助。

下载早期版本的SDK

Android Studio自带最新版本的SDK和系统模拟器镜像。但若想在Android早期版本上测试应用,还需额外下载相关工具组件。可通过Android SDK管理器来配置安装这些组件。在Android Studio中,选择To o ls→Android→SDK Manager菜单项。如图1-1所示。
1-1  Android Studio中的SDK管理器
选择并安装需要的Android版本和工具。下载这些组件需要一定时间,请耐心等待。
通过Android SDK管理器,还可以及时获取Android最新发布内容,比如新系统平台或新版本工具等。

应用开发

1.1 项目的创建

首先,打开Android Studio,创建GeoQuiz项目。如图1.1-1所示。

图1.1-1

此次项目的具体目录。如图1.1-2所示。

图1.1-2

1.2 代码的编写

1.2.1 界面设计

此次项目的具体界面如下图所示。

主界面设计(竖屏、横屏)

CHEAT按钮的关联界面设计

1.2.2 源码

在spring.xml中完成设置的代码如下。

 1 <resources>2     <string name="app_name">GeoQuiz</string>3 4     <string name="true_button">TRUE</string>5     <string name="false_button">FALSE</string>6     <string name="next_button">NEXT</string>7     <string name="prev_button">PREV</string>8     <string name="correct_toast">Correct!</string>9     <string name="incorrect_toast">Incorrect!</string>
10     <string name="warning_text">Are you sure you want to do this?</string>
11     <string name="show_answer_button">Show Answer</string>
12     <string name="cheat_button">Cheat!</string>
13     <string name="judgment_toast">Cheating is wrong.</string>
14     <string name="question_oceans">The Pacific Ocean is larger than the Atlantic Ocean.</string>
15     <string name="question_mideast">The Suez Canal connects the Red Sea and the Indian Ocean.</string>
16     <string name="question_africa">The source of the Nile River is in Egypt.</string>
17     <string name="question_americas">The Amazon River is the longest river in the Americas.</string>
18     <string name="question.asia">Lake Baikal is the world\'s oldest and deepest freshwater lake.</string>
19 </resources>

在QuizActivity.java中实现从布局到视图的代码如下。

 1     @Override2     protected void onCreate(Bundle savedInstanceState) {3         super.onCreate(savedInstanceState);4         Log.d(TAG, "onCreate(Bundle) called");5         setContentView(R.layout.activity_quiz);6 7         if (savedInstanceState != null) {8             mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0);9         }
10
11         mQuestionTextView = (TextView) findViewById(R.id.question_text_view);
12
13         mTrueButton = (Button) findViewById(R.id.true_button);
14         mTrueButton.setOnClickListener(new View.OnClickListener() {
15             @Override
16             public void onClick(View v){
17                 checkAnswer(true);
18             }
19         });
20         mFalseButton = (Button) findViewById(R.id.false_button);
21         mFalseButton.setOnClickListener(new View.OnClickListener() {
22             @Override
23             public void onClick(View v){
24                 checkAnswer(false);
25             }
26         });
27
28         mNextButton = (Button) findViewById(R.id.next_button);
29         mNextButton.setOnClickListener(new View.OnClickListener() {
30             @Override
31             public void onClick(View v) {
32                 mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;
33                 mIsCheater = false;
34                 updateQuestion();
35             }
36         });
37
38         mPrevButton = (Button) findViewById(R.id.prev_button);
39         mPrevButton.setOnClickListener(new View.OnClickListener() {
40             @Override
41             public void onClick(View v) {
42                 mCurrentIndex = (mCurrentIndex - 1) % mQuestionBank.length;
43                 updateQuestion();
44             }
45         });
46
47         mCheatButton = (Button)findViewById(R.id.cheat_button);
48         mCheatButton.setOnClickListener(new View.OnClickListener() {
49             @Override
50             public void onClick(View v) {
51                 boolean answerIsTrue = mQuestionBank[mCurrentIndex].ismAnswerTrue();
52                 Intent intent = CheatActivity.newIntent(QuizActivity.this, answerIsTrue);
53                 startActivityForResult(intent, REQUEST_CODE_CHEAT);
54             }
55         });
56
57         updateQuestion();
58
59     }

在Question.java模型层中编写的代码如下。

 1 public class Question {2     private int mTextResId;3     private boolean mAnswerTrue;4 5     public Question(int textResId, boolean answerTrue){6         mTextResId = textResId;7         mAnswerTrue = answerTrue;8     }9
10     public int getmTextResId() {
11         return mTextResId;
12     }
13
14     public void setmTextResId(int mTextResId) {
15         this.mTextResId = mTextResId;
16     }
17
18     public boolean ismAnswerTrue() {
19         return mAnswerTrue;
20     }
21
22     public void setmAnswerTrue(boolean mAnswerTrue) {
23         this.mAnswerTrue = mAnswerTrue;
24     }
25 }

1.3 Android与MAC设计模式

在响应用户单击按钮等事件时,对象间的交互控制数据流如图1.3-1所示。
图1.3-1
其中值得注意的是,模型对象与视图对象不直接交互。
控制器作为它们之间的联系纽带,接收对象发送的消息,然后向其他对象发送操作指令。
创建数组对象后,通过与Textview和button交互,在屏幕上显示问题,并且对用户的回答做出反应的数据流如图1.3-2所示。

图1.3-2

1.4 Activity的生命周期

在项目中主要使用的Activity的生命周期如图1.4-1所示。

图1.4-1

1.5 CHEAT按钮的关联界面

在activity_cheat.xml中编写的组件代码如下所示。

 1 <?xml version="1.0" encoding="utf-8"?>2 3 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"4                 xmlns:tools="http://schemas.android.com/tools"5     android:layout_width="match_parent"6     android:layout_height="match_parent"7     android:orientation="vertical"8     android:gravity="center"9     tools:context="classroom.geoquiz.CheatActivity">
10
11     <TextView
12         android:layout_width="wrap_content"
13         android:layout_height="wrap_content"
14         android:padding="24dp"
15         android:text="@string/warning_text"/>
16
17     <TextView
18         android:layout_width="wrap_content"
19         android:layout_height="wrap_content"
20         android:id="@+id/answer_text_view"
21         android:padding="24dp"
22         tools:text="Answer"/>
23
24     <Button
25         android:id="@+id/show_answer_button"
26         android:layout_width="wrap_content"
27         android:layout_height="wrap_content"
28         android:text="@string/show_answer_button"/>
29
30 </LinearLayout>

1.6 备注

以下是项目过程开发中遇到的问题。

1.6.1 Gradle文件下载速度慢

使用阿里云的国内镜像仓库地址,就可以快速的下载需要的文件。

修改项目根目录下的文件 build.gradle 如下。

buildscript {repositories {maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} } } allprojects { repositories { maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'} } }

然后选择重新构建项目就可以了。

转载于:https://www.cnblogs.com/MiracleSugar/p/7536921.html

Android开发1、2周——GeoQuiz项目相关推荐

  1. 【Android FFMPEG 开发】音视频基础 和 FFMPEG 编译 ( 音视频基础 | MPEG-4 标准 | Android 开发环境 | FFMPEG 交叉编译 | 安卓项目导入配置 )

    本篇博客代码及资源下载 : https://download.csdn.net/download/han1202012/10382762 文章目录 一. 音视频基础 1. 音频基础 (1) 声音要素 ...

  2. Android开发之第一个小项目--我的MP3播放器(一)

    不知不觉学习android也已经有一段时间了,学习完了基础的android知识后,一时间有点迷茫不知道该干什么,于是想写个项目给自己练练手,本来我以为MP3播放器挺好写的,结果后来仔细看了看我3年都没 ...

  3. 2020.8.13 京东Android开发二面

    本次面试着重考察了计算机基础知识,Android相关均未涉及,及时暴露了我的一些漏洞,时间尚早,尽快补上来吧. 2020.8.13 京东Android开发二面 问题 聊项目 用过哪些数据库 数据库索引 ...

  4. Android开发开源源代码

    Android经典的开源项目其实非常多,把自己熟悉的一些开源项目整理起来,希望能对Android开发同学们有所帮助 项目篇: 1.Apollo音乐播放器 就一个很好的播放器,但是实现的特别好!!! 地 ...

  5. Android开发Service之BindService

    前言 一直使用 Qt 来进行桌面端和移动端开发,对 Android 开发并不熟悉,但是项目中往往又经常会用到 Android 原生开发的东西.本次收集了一些关于BindService相关的知识供自己学 ...

  6. 学习Android开发是否有前途?

    现在越来越多的手机.和平板电脑等产品都在采用安卓系统,Android开发的人才越来越缺乏,据统计,中国3G研发人才达到了3-400万.如果以后想从事安卓开发的工作,不仅仅要对程序技术非常熟练,还要了解 ...

  7. Android开发 AndroidStudio数据库可视化

    一.导出数据库使用SQLiteStudio工具查看   相信大家做Android开发或多或少会遇到一些项目中需要用到数据库,过去咱们用了数据库想要实时查看自己创建的数据库中数据比较费劲,要从Devic ...

  8. 个人从零开发一款 Android 应用、上线并盈利 | 项目复盘

    最近个人开发的一款应用 言叶 刚刚发布了 1.4.0,至此,我想要开发的大部分功能已经完成了.本来我也想做一次复盘,刚好趁这个机会分析下并发出来.在这篇文章中,我想分析的并不仅仅是技术,除此此外,我也 ...

  9. 【安卓学习之开发工具】 Android 学习-- 下载过的一些项目

    █ [安卓学习之开发工具] Android 学习-- 下载过的一些项目 █ 相关文章: ● [安卓学习之常见问题] app维护可能遇到的问题 ● [IOS学习之常见问题] app维护可能遇到的问题 ● ...

  10. 树莓派Android Things物联网开发:创建一个Things项目

    [转载请注明出处:http://blog.csdn.net/leytton/article/details/77854144] <树莓派Android Things物联网开发>系列文章专栏 ...

最新文章

  1. 0x02 mysql 表格相关操作
  2. WebApi中跨域解决办法
  3. Linux Rsync 服务配置
  4. C++官方文档-this
  5. 自顶向下语法分析的作业
  6. 学生通讯录管理系统的设计与实现
  7. 十大著名黑客—— 凯文-米特尼克
  8. 怎么设置html禁止直接打开,如何禁止网页自动跳转
  9. 算法学习之投票算法以及对应leetcode题目
  10. 保温杯哪种材质最好_玻璃杯材质分为哪几种 玻璃杯什么材质最好
  11. html5 视频缩略图,应用canvas获取video的缩略图
  12. 集成墙面拆后恐怖极了,没想到这么美!
  13. python--DataFrame随机抽样
  14. OPC DA 与 OPC UA区别
  15. CentOS 6.5下安装Confluence 5.4
  16. java解压两层zip文件_Java解压缩zip - 解压缩多个文件或文件夹实例
  17. Java内存区域和GC机制
  18. 【macOS免费软件推荐】第6期:洛雪音乐
  19. components matlab,MATLAB图论工具箱—components函数
  20. CMake笔记:add_custom_command不执行

热门文章

  1. 一个简单的前后端分离案例
  2. python字符串前缀
  3. python 求解给定字符串中的最长DNA序列长度
  4. 对python几个常见的小函数进行学习使用
  5. java arraydeque poll,Java ArrayDeque pollLast()方法
  6. 35c语言编程,35编号c语言编程题08850.pdf
  7. es6转es5_ES6 配置运行环境
  8. IDEA java 显示build目录
  9. Kubernetes 小白学习笔记(21)--kubernetes的运维-管理Lable
  10. mysql创建gbk库_MYSQL创建utf-8和GBK格式数据库_MySQL