android入門小Demo
阿新 • • 發佈:2018-10-31
分享一個android端的小例子,程式碼雖少,五臟俱全。
得到的效果是
廢話不多說,直接上程式碼。
我們先看專案的結構。
我們的主活動頁面是activity_main.xml 程式碼如下
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/question_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:padding="24dp"/> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical|center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/true_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/true_button"/> <Button android:id="@+id/false_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/false_button"/> </LinearLayout> <Button android:id="@+id/cheat_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|center" android:text="@string/cheat_button"/> <Button android:id="@+id/next_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:text="@string/next_button"/> </FrameLayout>
對應的活動頁面是MainActivity.java,程式碼如下:
package ligz.com.geoquiz; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { private static final String TAG = "QuizActivity"; private static final String KEY_INDEX = "index"; private Button mTrueButton; private Button mFalseButton; private Button mNextButton; private TextView mQuestionTextView; private Button mCheatButtton;//作弊的按鈕 private boolean mIsCheater; private TrueFalse[] mQuestionBank = new TrueFalse[]{ new TrueFalse(R.string.question_text,true), new TrueFalse(R.string.question_text1,true), new TrueFalse(R.string.question_text2,true), new TrueFalse(R.string.question_text3,true), new TrueFalse(R.string.question_text4,false), }; private int mCurrentIndex = 0; private void updateQuestion(){ int question = mQuestionBank[mCurrentIndex].getmQuestion(); mQuestionTextView.setText(question); } private void checkAnswer(boolean userPressedTrue){ boolean answerIsTrue = mQuestionBank[mCurrentIndex].ismTrueQuestion(); 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(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d(TAG, "onCreate(Bundel) called"); setContentView(R.layout.activity_main); //從陣列中拿出問題放入TextView mQuestionTextView = (TextView)findViewById(R.id.question_text_view); /** * 正確按鈕 */ mTrueButton = (Button)findViewById(R.id.true_button); //使用監聽器 mTrueButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkAnswer(true); } }); /** * 錯誤按鈕 */ mFalseButton = (Button) findViewById(R.id.false_button); mFalseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { checkAnswer(false); } }); /** * 下一道題目按鈕 */ mNextButton = (Button)findViewById(R.id.next_button); mNextButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length; mIsCheater = false; updateQuestion(); } }); if(savedInstanceState != null){ mCurrentIndex = savedInstanceState.getInt(KEY_INDEX, 0); } /** * 作弊的按鈕跳轉 */ mCheatButtton = (Button) findViewById(R.id.cheat_button); mCheatButtton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //Start CheatActivity //跳轉activity Intent i = new Intent(MainActivity.this, CheatActivity.class); //傳遞內容 boolean answerIsTrue = mQuestionBank[mCurrentIndex].ismTrueQuestion(); i.putExtra(CheatActivity.EXTRA_ANSWER_IS_TRUE, answerIsTrue); //startActivity(i); startActivityForResult(i,0);//第二個引數是請求程式碼,當一個activity有多個子activity時,且需要區分訊息反饋 } }); updateQuestion(); } @Override public void onSaveInstanceState(Bundle savedInstanceState){//記住當前的答案,當螢幕旋轉時,仍可以回到當前問題 super.onSaveInstanceState(savedInstanceState); Log.i(TAG, "onSavedInstanceState"); savedInstanceState.putInt(KEY_INDEX, mCurrentIndex); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){// if(data == null){ return; } mIsCheater = data.getBooleanExtra(CheatActivity.EXTRA_ANSWER_SHOWN, false); } }
點選cheat按鈕,進入檢視答案的頁面,對應的xml檔案是activity_cheat.xml如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="24dp" android:text="@string/warning_text"/> <TextView android:id="@+id/answerTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="24dp"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/showAnswerButton" android:text="@string/show_answer_button"/> </LinearLayout>
對應的CheatActivity.java檔案如下:
package ligz.com.geoquiz;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/**
* Created by Es muss sein on 2018/9/4.
*/
public class CheatActivity extends Activity{
public static final String EXTRA_ANSWER_IS_TRUE = "ligz.com.geoquiz.answer_is_true";
public static final String EXTRA_ANSWER_SHOWN = "ligz.com.geoquiz.answer_show";
private boolean mAnswerIsTrue;
private TextView mAnswerTextView;
private Button mShowAnswer;
private void setAnswerShowResult(boolean isAnswerShown){
Intent data = new Intent();
data.putExtra(EXTRA_ANSWER_SHOWN, isAnswerShown);
setResult(RESULT_OK, data);
}
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cheat);
mAnswerIsTrue = getIntent().getBooleanExtra(EXTRA_ANSWER_IS_TRUE, false);
mAnswerTextView = (TextView)findViewById(R.id.answerTextView);
//答案不會顯示除非使用者按下按鈕
setAnswerShowResult(false);
mShowAnswer = (Button)findViewById(R.id.showAnswerButton);
mShowAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(mAnswerIsTrue){
mAnswerTextView.setText(R.string.true_button);
}else{
mAnswerTextView.setText(R.string.false_button);
}
setAnswerShowResult(true);
}
});
}
}
model檔案TrueFalse.java如下:
package ligz.com.geoquiz;
/**
* Created by Es muss sein on 2018/9/3.
*/
public class TrueFalse {
private int mQuestion;
private boolean mTrueQuestion;
public TrueFalse(int mQuestion, boolean mTrueQuestion){
this.mQuestion = mQuestion;
this.mTrueQuestion = mTrueQuestion;
}
public int getmQuestion() {
return mQuestion;
}
public void setmQuestion(int mQuestion) {
this.mQuestion = mQuestion;
}
public boolean ismTrueQuestion() {
return mTrueQuestion;
}
public void setmTrueQuestion(boolean mTrueQuestion) {
this.mTrueQuestion = mTrueQuestion;
}
}
對應Strings.xml如下:
<resources>
<string name="app_name">GeoQuiz</string>
<string name="question_text">中國哲學簡史的作者是否是馮友蘭</string>
<string name="question_text1">1984的作者是喬治奧威爾嗎</string>
<string name="question_text2">王小波寫過沉默的大多數嗎</string>
<string name="question_text3">意志和表象的世界是叔本華的作品嗎</string>
<string name="question_text4">牛棚雜憶和動物莊園的作者是同一人嗎</string>
<string name="cheat_button">cheat!</string>
<string name="warning_text">你確定要檢視答案嗎</string>
<string name="show_answer_button">檢視答案</string>
<string name="judgment_toast">Cheating is wrong</string>
<string name="true_button">對</string>
<string name="false_button">錯</string>
<string name="menu_settings">Settings</string>
<string name="correct_toast">回答正確</string>
<string name="incorrect_toast">回答錯誤</string>
<string name="next_button">下一題</string>
</resources>