移动应用程序设计基础——用户登录实验

《移动应用程序设计基础》实 验 报 告(二)

实验名称:

用户登录实验

所使用的工具软件及环境:

 JDK1.8,Android Studio

 

一、实验目的:

本实验通过实现用户登录界面,使得学员能进一步加深和掌握Android的常用基本控件使用,包括:TextView,EditView、CheckBox、Button、ImageView以及ProgressBar等。 

二、实验内容:

  1. 构建登录界面布局login.xml,放置各类按钮,如下图;
  2. 编写Activity代码LoginActivity.java,实现EditView的username、password和CheckBox的issaved控件发现取得;
  3. 编写进度条ProgressBar的界面布局progress.xml,放置水平进度条,设置最大值属性为100;
  4. 编写ProgressActivity.java代码,通过线程和Handler模拟实现ProgressBar的进度条的进度值变动,每100毫秒增加1;
  5. 点击Submit按钮,页面跳转到进度条界面,进度条启动,当进度值达到最大(100)时,关闭进度条,并将用户名(username)信息返回登录页面,通过Toast弹出信息框提示登录成功或失败原因。
  6. 提示:页面跳转可以使用startActivityForResult方法,返回结果可以覆写onActivityResult方法,设置返回值可以使用setResult方法。
  7. 实验结果

三、源代码

//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制作有了较大的进步与学习。

Guess you like

Origin blog.csdn.net/weixin_48388330/article/details/122524833