第一个APP——GeoQuiz
第一个APP的知识点以及对代码的理解
APP预览
主页面效果图
首先要做的就是界面设计
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="24dp" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/true_button"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/false_button"/></LinearLayout><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/prev_button"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/next_button"/></LinearLayout><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom|center_horizontal"android:text="@string/cheat_button"/></LinearLayout>
上图共含有如下几个组件:
创建字符串资源
<resources><string name="app_name">GeoQuiz</string><string name="question_australia">堪培拉是澳大利亚的首都 </string><string name="true_button">TRUE</string><string name="false_button">FALSE</string><string name="prev_button">Prev</string><string name="cheat_button">Cheat!</string> </resources>
资源ID
android:id="@+id/true_button"
设置完id之后就可以在QuizActivity中直接获取它们
添加成员变量(QuizActivity.java)
private Button mTrueButton;
如果出现报错可能是因为没有导入包,按Alt+Enter组合键可以自动导入所需要的包
引用组件(QuizActivity.java)
添加完成员变量后就要开始引用
mTrueButton = (Button) findViewById(R.id.true_button);
设置监听器
mTrueButton.setOnClickListener(new View.OnClickListener(){public void onClick(View v){}});
创建提示消息
<string name="correct_toast">Correct!</string><string name="incorrect_toast">Incorrect!</string>
使用代码自动补全,选择makeText(Context context, int resID, int duration)方法,完成makeText方法的全部参数设置
mTrueButton.setOnClickListener(new View.OnClickListener(){public void onClick(View v){Toast.makeText(QuizActivity.this,R.string.incorrect_toast,Toast.LENGTH_SHORT).show();}});
为了完善APP,增加题库,所有还需要为项目创建一个Question类,该类的一个实例代表一个问题,
public class Question {private int mTextResId;private boolean mAnswerTrue;public Question(int textResId,boolean answertrue){mTextResId = textResId;mAnswerTrue = answertrue;}public int getTextResId() {return mTextResId;}public void setTextResId(int textResId) {mTextResId = textResId;}public boolean isAnswerTrue() {return mAnswerTrue;}public void setAnswerTrue(boolean answerTrue) {mAnswerTrue = answerTrue;} }
新增按钮以及文本视图的调整(activity_quiz.xml)
<TextViewandroid:id="@+id/question_text_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="24dp" />
<Buttonandroid:id="@+id/next_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/next_button"/>
更新字符串资源定义(strings.xml)
<string name="next_button">Next</string>
添加问题库
<string name="question_oceans">太平洋比大西洋大</string><string name="question_mideast">苏伊士运河连接着红海和印度洋</string><string name="question_africa">尼罗河流域在埃及</string><string name="question_americas">亚马逊河是美国最长的河</string><string name="question_asia">贝加尔湖是世界上最古老最深的淡水湖</string>
下面要在QuizActivity.java文件中添加TextView和新Button变量。另外,再创建一个Question对象数组以及一个该数组的索引变量
增加按钮变量及Question对象数组(QuizActivity.java)
private Button mNextButton; private TextView mQuestionTextView; private Question[] mQuestionBank = new Question[]{new Question(R.string.question_australia ,true),new Question(R.string.question_oceans,true),new Question(R.string.question_mideast,false),new Question(R.string.question_africa,false),new Question(R.string.question_americas,true),new Question(R.string.question_asia,true)};private int mCurrentIndex=0;
使用TextView(QuizActivity.java)
mQuestionTextView = (TextView) findViewById(R.id.question_text_view); int question = mQuestionBank[mCurrentIndex].getTextResId(); mQuestionTextView.setText(question);
然后运行GeoQuiz应用。可看到数组存储的第一个问题显示在TextView上了
为Next按钮设置监听器
该监听器的作用是:递增数组索引并相应更新显示TextView的文本内容
mNextButton = (Button) findViewById(R.id.next_button); mNextButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;int question = mQuestionBank[mCurrentIndex].getTextResId();mQuestionTextView.setText(question);} });
mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;这段代码表示向下切换,所以在挑战练习中增加向上切换只需要把+1改成-1即可
使用updateQuestion()封装公共代码(QuizActivity.java)
private void updateQuestion(){int question = mQuestionBank[mCurrentIndex].getTextResId();mQuestionTextView.setText(question);}
封装代码的只要目的是减少重复代码,可以直接调用
mNextButton.setOnClickListener(new View.OnClickListener(){public void onClick(View v){mCurrentIndex = (mCurrentIndex+1) % mQuestionBank.length;updateQuestion();}});
增加方法checkAnswer(boolean)(QuizActivity.java)
private void checkAnswer(boolean userPressedTrue){boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue();int messageResId = 0;if(mIsCheater){messageResId = R.string.judgment_toast;}else {if (userPressedTrue == answerIsTrue){messageResId = R.string.correct_toast;} else {messageResId = R.string.incorrect_toast;}}Toast.makeText(this,messageResId,Toast.LENGTH_SHORT).show();}
调用方法checkAnswer(boolean)(QuizActivity.java)
mTrueButton = (Button) findViewById(R.id.true_button);mTrueButton.setOnClickListener(new View.OnClickListener(){public void onClick(View v){//Toast.makeText(QuizActivity.this,R.string.incorrect_toast,Toast.LENGTH_SHORT).show();checkAnswer(true);}});
为按钮添加图标,需要在XML文件中引用资源
<Button android:id="@+id/next_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/next_button" android:drawableRight="@drawable/arrow_right" android:drawablePadding="4dp" />
日志跟踪理解Activity生命周期
输出日志信息
新增一个TAG常量(QuizActivity.java)
private static final String TAG = "QuizActivity";
为onCreate(...)方法添加日志输出代码(QuizActivity.java)
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.d(TAG,"onCreate(Bundle)called");setContentView(R.layout.activity_quiz);
覆盖更多生命周期方法(QuizActivity.java)
@Overridepublic void onStart(){super.onStart();Log.d(TAG,"onStart() called");}@Overridepublic void onResume(){super.onResume();Log.d(TAG,"onResume() called");}@Overridepublic void onPause(){super.onPause();Log.d(TAG,"onPause() called");}@Overridepublic void onStop(){super.onStop();Log.d(TAG,"onStop() called");}@Overridepublic void onDestroy(){super.onDestroy();Log.d(TAG,"onDestroy() called");}
创建CheatActivity,实现界面跳转
基于intent的通信
启动CheatActivity(QuizActivity.java)
mCheatButton = (Button)findViewById(R.id.cheat_button); mCheatButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(QuizActivity.this, CheatActivity.class); startActivity(i); } })
转载于:https://www.cnblogs.com/mhhs/p/7525480.html
第一个APP——GeoQuiz相关推荐
- 读完这本书,我做了一个APP
你听说过番茄工作法吗?番茄工作法是一种简单易行的时间管理方法,可以让你很快的进入工作状态,更高效的完成一天的任务. 番茄工作法是以不断循环的"番茄"为基础的,一次工作-休息的循环被 ...
- 前端有啥好用的手机模拟软件吗_隐藏应用,软件双开,一个APP就解决了
大家好,这里是小狐狸 专注分享实用的干货 相信大家可能都有点 不想被人发现的小东西 平常保存在手机里 偶尔拿出来看两眼 如果女朋友翻看自己的手机 翻到些不想让她们看到的就尴尬了 今天给大家推荐可以 ...
- 怎么用Android做登录界面,利用Android怎么制作一个APP登录界面
利用Android怎么制作一个APP登录界面 发布时间:2020-12-02 17:09:10 来源:亿速云 阅读:79 作者:Leah 这期内容当中小编将会给大家带来有关利用Android怎么制作一 ...
- 初学者用pycharm创建一个django项目和一个app时需要注意的事项
目录 如何新建一个djiango项目: 如何创建一个app: 如何启动一个django项目: 新建一个django项目,需要注意以下几项配置: 如何新建一个djiango项目: 1.在pycharm中 ...
- mysql独立开发_独立开发一个 App 是一种怎样的体验?
我要回答一下这样孤单的问题.哈哈哈. 我做过2个已经上线的APP. 第一个<仅仅电影>(已经下线了): 那时候年轻,想做一个独立的电影影单类的APP,推荐很多好看电影.然后想法立了就开始做 ...
- 【移动端debug-6】如何做一个App里的web调试小工具
原文链接:如何做一个App里的web调试小工具 我们知道现在hybrid app非常流行,在这样的app里,h5页面是应用非常广泛的.相对于以往在pc端开发的网页,放在app里的网页由于无法直接使用桌 ...
- Android项目实战(二十二):启动另一个APP or 重启本APP
Android项目实战(二十二):启动另一个APP or 重启本APP 原文:Android项目实战(二十二):启动另一个APP or 重启本APP 一.启动另一个APP 目前公司项目需求,一个主AP ...
- android应用程序 多少钱_关于APP开发你最想了解的事,开发一个APP多少钱?
当我们在进行APP开发,最关注的问题一定是APP开发的价格问题,而作为软件开发行业的从业人员,经常会遇到这样的情况:"别说这么多,你只要告诉我开发一个软件多少钱就行了". 郑州AP ...
- Android Studio下载、安装、配置及连接真机开发第一个App ——入门选手快进
最近的安卓测试给我心态搞蹦了,问也没人问,难受简直了!又是一轮自学之路(说实话这一路上教会我一个很大的道理就是一定要有愿意帮助你的老师,还有自己的自觉,一样也不能少.前者没有的话只能后者补了呜呜呜 ...
- 语言做一个自动售货机软件_软件开发手机app系统软件高端定制做一个app软件要多少钱...
软件开发手机app系统软件高端定制-做一个app软件要多少钱 APP开发分原生APP开发和在线制作,我们来看下这两种都需要多少费用吧. 1.原生APP开发(定制开发) 互联网是个神奇的大网,大数据开发 ...
最新文章
- OpenSSH7.0兼容性测试报告
- 每日一学|数据中心spine leaf网络架构
- 提取DVD视频盘的资源
- 对 JsonConvert 的认识太肤浅了,终于还是遇到了问题
- mybatis环境搭建步骤(含配置文件代码)
- Python缩小图像
- Spring @Autowird
- 北京师范大学c语言题库,北京师范大学C语言题库.doc
- unity设置手机横屏方法和相关问题
- Python制作微信自动回复机器人,打游戏时自动回复女朋友消息
- Cookie--防劫持的处理
- 语音专题第一讲,麦克风阵列的语音信号处理技术
- 毕业设计-基于大数据的移动图书馆个性化推荐系统-python
- 【Day12-Stream流Map集合】
- Quick-cocos2d-x 与COCOS2DX 区别
- android java 指针异常处理,Android程序员日常开发中异常总结
- GHost++ CB (Custom Build) MOD
- 量化交易是不是用机器预测股票涨跌?这靠谱吗?
- Thinkcmf子栏目获取父级栏目所有子栏目列表
- 《每日一题》NO.13:名词解释 设计流程篇
热门文章
- QT数据可视化框架编程实战之三维曲面图 实时变化的三维曲面图 补天云QT技术培训专家
- 详细!详细!详细!检查百分百:服务器巡检脚本-shell
- 一文解读基于PaddleSeg的钢筋长度超限监控方案
- [mtk7621]双核四线程怎么理解
- altium room 布局_AD(Altium Designer)PCB布线中的“格式刷”,助力快速布局布线
- 火绒安全卫士安装教程(非常详细)从零基础入门到精通,看完这一篇就够了
- PTA-7-11 分段计算居民水费 (10 分)
- UE4和C++ 开发-blueprintcallable是什么
- PR或者AE启动不了,桌面弹出Crash文件解决办法
- python中size是什么意思_python如何使用numpy中的size()函数?