《移動應用程式設計基礎》實 驗 報 告(二)
實驗名稱:
用戶登錄實驗
所使用的工具軟體及環境:
JDK1.8,Android Studio
一、實驗目的:
本實驗通過實作用戶登錄界面,使得學員能進一步加深和掌握Android的常用基本控制元件使用,包括:TextView,EditView、CheckBox、Button、ImageView以及ProgressBar等,
二、實驗內容:
- 構建登錄界面布局login.xml,放置各類按鈕,如下圖;

- 撰寫Activity代碼LoginActivity.java,實作EditView的username、password和CheckBox的issaved控制元件發現取得;
- 撰寫進度條ProgressBar的界面布局progress.xml,放置水平進度條,設定最大值屬性為100;
- 撰寫ProgressActivity.java代碼,通過執行緒和Handler模擬實作ProgressBar的進度條的進度值變動,每100毫秒增加1;
- 點擊Submit按鈕,頁面跳轉到進度條界面,進度條啟動,當進度值達到最大(100)時,關閉進度條,并將用戶名(username)資訊回傳登錄頁面,通過Toast彈出資訊框提示登錄成功或失敗原因,
- 提示:頁面跳轉可以使用startActivityForResult方法,回傳結果可以覆寫onActivityResult方法,設定回傳值可以使用setResult方法,
- 實驗結果


三、源代碼
//activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"><![CDATA[
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:layout_editor_absoluteX="162dp"
tools:layout_editor_absoluteY="80dp">
]]>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="72dp"
android:orientation="horizontal"></LinearLayout>
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="323dp"
android:layout_height="153dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="85dp"
android:layout_height="match_parent"
android:orientation="vertical"></LinearLayout>
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="149dp"
app:srcCompat="@drawable/logo"
tools:ignore="MissingConstraints" />
</LinearLayout>
<FrameLayout
android:layout_width="375dp"
android:layout_height="75dp">
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="102dp"
android:orientation="horizontal">
<FrameLayout
android:layout_width="101dp"
android:layout_height="match_parent">
</FrameLayout>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="SYSTEM LOGIN"
android:textSize="30sp"
tools:ignore="MissingConstraints" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="407dp"
android:layout_height="138dp"
android:orientation="vertical"
tools:ignore="MissingConstraints">
<LinearLayout
android:layout_width="381dp"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="45dp"
android:layout_height="match_parent"
android:orientation="horizontal"></LinearLayout>
<TextView
android:id="@+id/textView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Username:"
android:textSize="20dp"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="481dp" />
<EditText
android:id="@+id/usename_edtxt"
android:layout_width="244dp"
android:layout_height="wrap_content"
android:drawablePadding="12dp"
android:gravity="center|left"
android:hint="請輸入用戶名"
android:textColorHint="@android:color/darker_gray"
android:textSize="24sp"
tools:ignore="MissingConstraints" />
</LinearLayout>
<LinearLayout
android:layout_width="382dp"
android:layout_height="wrap_content"
android:orientation="horizontal">
<LinearLayout
android:layout_width="45dp"
android:layout_height="match_parent"
android:orientation="horizontal"></LinearLayout>
<TextView
android:id="@+id/textView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Password:"
android:textSize="20dp"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="16dp"
tools:layout_editor_absoluteY="538dp" />
<EditText
android:id="@+id/password_edtxt"
android:layout_width="272dp"
android:layout_height="55dp"
android:drawablePadding="12dp"
android:gravity="center|left"
android:hint="請輸入密碼"
android:inputType="textPassword"
android:textColorHint="@android:color/darker_gray"
android:textSize="24sp"
tools:ignore="MissingConstraints"
tools:layout_editor_absoluteX="117dp"
tools:layout_editor_absoluteY="523dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="262dp"
android:layout_height="match_parent"
android:orientation="horizontal">
</LinearLayout>
<CheckBox
android:id="@+id/save_password_checkBox"
android:layout_width="346dp"
android:layout_height="match_parent"
android:text="Save Password" />
</LinearLayout>
</LinearLayout>
<LinearLayout
android:layout_width="387dp"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="183dp"
android:layout_height="15dp"
android:orientation="horizontal">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="39dp"
android:layout_height="70dp"
android:orientation="vertical">
</LinearLayout>
<Button
android:id="@+id/submit_button"
android:layout_width="335dp"
android:layout_height="wrap_content"
android:backgroundTint="@color/black"
android:text="submit" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
//MainActivity.java
package com.example.login;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
static public EditText usenameEdtxt,passwordEdtxt;
static public CheckBox savePasswordCheckBox;
public Button submitButton;
public Boolean Selectcheckbox;
static public String select;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
usenameEdtxt=(EditText)findViewById(R.id.usename_edtxt);
passwordEdtxt=(EditText)findViewById(R.id.password_edtxt);
savePasswordCheckBox=(CheckBox)findViewById(R.id.save_password_checkBox);
submitButton=(Button)findViewById(R.id.submit_button);
//登錄按鈕監控
submitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String usename=usenameEdtxt.getText().toString();
String password=passwordEdtxt.getText().toString();
if(usename.isEmpty()){
usenameEdtxt.setError("用戶名不能為空");
usenameEdtxt.requestFocus();
return;
}
if(password.isEmpty()){
passwordEdtxt.setError("密碼不能為空");
passwordEdtxt.requestFocus();
return;
}
if(usename.length()>0&&password.length()>0){
Selectcheckbox=savePasswordCheckBox.isChecked();
if(Selectcheckbox)select="已勾選";
else select="未勾選";
Intent it=new Intent();
Context packageContext;
it.setClass(MainActivity.this, ProgressActivity.class);
MainActivity.this.startActivity(it);
}
}
});
}
}
// progress.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ProgressActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="76dp"
android:orientation="vertical">
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="169dp"
android:orientation="horizontal">
<LinearLayout
android:layout_width="45dp"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
<ProgressBar
android:id="@+id/horizontal_pbar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="322dp"
android:layout_height="97dp"
android:max="100" />
</LinearLayout>
</LinearLayout>
// ProgressActivity.java
package com.example.login;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class ProgressActivity extends AppCompatActivity {
//MainActivity mainActivity=new MainActivity();
private ProgressBar mProgress;
private Handler mHandler = new Handler();
public String a="admin";
private Boolean FLAG=true;
private Button startpbarbtn;
//private TextView cBoxStateTxt;
int mProgressStatus=0;
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.progress);
mProgress = (ProgressBar) findViewById(R.id.horizontal_pbar);
//設定監聽按鈕
//startpbarbtn = (Button)findViewById(R.id.start_pbar_btn);
//設定監視內容
//監聽
new Thread(new Runnable() {
public void run() {
//推薦使用標志位使其不執行代碼,不推薦使用true
while (FLAG) {
mProgressStatus = addNum();
// 更新進度條
// post方法推送一個Runnable到Handler,可以在此更新UI
mHandler.post(new Runnable() {
public void run() {
if (mProgressStatus < 100) {
mProgress.setProgress(mProgressStatus);
mProgressStatus++;
}
//執行完成后隱藏進度條并將標志設定為false
else {
mProgress.setVisibility(View.INVISIBLE);
FLAG = false;
if(MainActivity.usenameEdtxt.getText().toString().equals(a)&&
MainActivity.passwordEdtxt.getText().toString().equals(a)) {
Toast toast = Toast.makeText(getApplicationContext(),
"登錄成功Usename:"+MainActivity.usenameEdtxt.getText().toString()+
"\nPassword:"+MainActivity.passwordEdtxt.getText().toString()+
"\ncheckbox狀態:"+MainActivity.select,
Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
else{
Toast toast = Toast.makeText(getApplicationContext(),
"登錄失敗Usename:"+MainActivity.usenameEdtxt.getText().toString()+
"\nPassword:"+MainActivity.passwordEdtxt.getText().toString()+
"\ncheckbox狀態:"+MainActivity.select,
Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
finish();
}
}
});
}
}
private int addNum() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
return mProgressStatus;
}
}).start();
//cBoxStateTxt.setText("CheckBox狀態: "+mainActivity.select);
}
}
四、實驗結果測驗





此時輸入設定好的username和password,勾選或不勾選save password,點擊submit按鈕會跳轉到進度條界面,進度條滿后會回傳界面,出現登錄成功還有輸入的username和password且save password的勾選狀態的小提示,同時如果輸入錯誤的username和password會出現登錄錯誤還有其他部分的小提示,
五、識訓與體會
通過此次實驗,使得更能進一步加深和掌握Android的常用基本控制元件使用,對基本控制元件有了基本的認識,而且對以前的知識有了進一步的復習與鞏固,對今后android的app制作有了較大的進步與學習,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/413499.html
標籤:其他
