Android項目開發---- GeoQuiz
GeoQuiz項目總結:
- 前言
本項目為這學期開發的第一個應用,通過此項目我們能學習到一些Android基本概念以及構成應用的UI組件。此篇博客也是我學習編程以來第一次正式完成的第一篇博客,仍是十分淺顯與生澀。
- 開發環境
本項目采用了AndroidStudio為開發環境。
首先我們需要在androidstudio中創建本項目,項目名稱為GeoQuiz。
- 先在AndroidStudio中Start a new Android Studio project
- 項目名稱為GeoQuiz
- 選擇一個空頁面
- 之後繼續NEXT然後選擇Finish,一個空的項目包變好了。
- 本項目一共需要如下目錄
- 代碼的編寫
首先我們需要進行的是用戶界面的實現,本項目主要采用了垂直與水平LinearLayout組件,TextView組件和Button組件。在text界面我們可以快速的編寫組件代碼從而更加效率的完成布局,本項目總共有兩個activity,以及三個布局視圖包括了可旋轉視圖,我們可以看到完成後的布局如下:
我們為所有的button控件全都設置了監聽器,所有的監聽器全部使用了匿名內部類來實現,這樣可以相對集中實現監聽器方法並且可以不用繁瑣的創建命名類,我們可以感受一下實現代碼:
-
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/true_button"/>
-
<resources> <string name="app_name">GeoQuiz</string> ... <string name="true_button">True</string> ... </resources>
-
<Button android:id="@+id/true_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/true_button"/>
-
public class QuizActivity extends AppCompatActivity { private Button mTrueButton; ... }
-
public class QuizActivity extends AppCompatActivity { private Button mTrueButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quiz); mTrueButton = (Button) findViewById(R.id.true_button); } }
-
... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_quiz); mTrueButton = (Button) findViewById(R.id.true_button); mTrueButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Does nothing yet, but soon! } }); mFalseButton = (Button) findViewById(R.id.false_button); } }
- 接下來運用了MVC的設計模式
如圖我們可以先簡單的了解:
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範。
- 模型(Model)—— 是應用程序中用於處理應用程序數據邏輯的部分。通常模型對象負責在數據庫中存取數據
- 視圖(View)—— 是應用程序中處理數據顯示的部分。通常視圖是依據模型數據創建的。
- 控制器(Controller)—— 是應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。
使用MVC的優點。
- 耦合性低 —— 視圖層和業務層分離,這樣就允許更改視圖層代碼而不用重新編譯模型和控制器代碼
- 重用性高 —— 多個視圖能共享一個模型
- 生命周期成本低 —— MVC使開發和維護用戶接口的技術含量降低。
結合代碼來更加深入了解:
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的生命周期
每個安卓都有其生命周期,在生命周期內,activity在運行、暫停、停止和不運行這四種狀態中轉換。每次狀態轉換時,都有相應的Activity方法發消息通知activity。下圖顯示了activity的生命周期、狀態以及狀態切換時系統調用的方法。
Activity是由Activity棧進管理,當來到一個新的Activity後,此Activity將被加入到Activity棧頂,之前的Activity位於此Activity底部。Acitivity一般意義上有四種狀態:
- 1.當Activity位於棧頂時,此時正好處於屏幕最前方,此時處於運行狀態;
- 2.當Activity失去了焦點但仍然對用於可見(如棧頂的Activity是透明的或者棧頂Activity並不是鋪滿整個手機屏幕),此時處於暫停狀態;
- 3.當Activity被其他Activity完全遮擋,此時此Activity對用戶不可見,此時處於停止狀態;
- 4.當Activity由於人為或系統原因(如低內存等)被銷毀,此時處於銷毀狀態;
在每個不同的狀態階段,Adnroid系統對Activity內相應的方法進行了回調。因此,我們在程序中寫Activity時,一般都是繼承Activity類並重寫相應的回調方法。
Android項目開發---- GeoQuiz