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

简介: 本实验通过实现用户登录界面,使得学员能进一步加深和掌握Android的常用基本控件使用,包括:TextView,EditView、CheckBox、Button、ImageView以及ProgressBar等。3、 编写Activity代码LoginActivity.java,实现EditView的username、password和CheckBox的issaved控件发现取得;4、 编写进度条ProgressBar的界面布局progress.xml,放置水平进度条,设置最大值属性为100;

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

实验名称:

用户登录实验

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

JDK1.8,Android Studio

一、实验目的:

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

二、实验内容:

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

    三、源代码

    //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>

    image.gif

    //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);
                    }
                }
            });
        }
    }

    image.gif

    // 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>

    image.gif

    // 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);
        }
    }

    image.gif

    四、实验结果测试

    image.gif编辑

    image.gif编辑

    image.gif编辑

    image.gif编辑

    image.gif编辑

    此时输入设置好的username和password,勾选或不勾选save password,点击submit按钮会跳转到进度条界面,进度条满后会返回界面,出现登录成功还有输入的username和password且save password的勾选状态的小提示。同时如果输入错误的username和password会出现登录错误还有其他部分的小提示。

    五、收获与体会

    通过此次实验,使得更能进一步加深和掌握Android的常用基本控件使用,对基本控件有了基本的认识,而且对以前的知识有了进一步的复习与巩固,对今后android的app制作有了较大的进步与学习。

    相关文章
    |
    计算机视觉 Python
    Opencv学习笔记(一):如何将得到的图片保存在指定目录以及如何将文件夹里所有图片以数组形式输出
    这篇博客介绍了如何使用OpenCV库在Python中将图片保存到指定目录,以及如何将文件夹中的所有图片读取并以数组形式输出。
    1267 0
    Opencv学习笔记(一):如何将得到的图片保存在指定目录以及如何将文件夹里所有图片以数组形式输出
    |
    存储 数据可视化
    BPMN介绍说明(图解)
    BPMN介绍说明(图解)
    2566 0
    原理篇:Seata TCC模式是如何解决幂等性、资源悬挂、空回滚问题的
    原理篇:Seata TCC模式是如何解决幂等性、资源悬挂、空回滚问题的
    2054 0
    |
    安全 Linux 网络安全
    2022-渗透测试-git提权(Linux)
    2022-渗透测试-git提权(Linux)
    2022-渗透测试-git提权(Linux)
    |
    安全 Linux 数据安全/隐私保护
    国内外四款强大的远控使用体验:ToDesk、向日葵、AnyDesk、Microsoft 远程桌面横向比较
    国内外四款强大的远控使用体验:ToDesk、向日葵、AnyDesk、Microsoft 远程桌面横向比较
    3294 0
    |
    12月前
    |
    存储 网络协议 测试技术
    阿里云通用算力型实例u1/u2i/u2a对比,差异解析与选型参考
    目前通用算力型实例规格已经有u1、u2i、u2a这三大实例类型,有的新手用户便宜不是很清楚他们之间有何区别?我们应该如何选择?本文从技术架构、性能指标、适用场景到收费价格,对比三大实例,以供了解和选择参考。
    |
    Python Windows
    Python实现常用办公文件格式转换
    本文介绍了如何使用Python及其相关库(如`pandas`、`openpyxl`、`python-docx`等)实现办公文件格式间的转换,包括XLS转XLSX、DOC转DOCX、PPT转PPTX、Word转PDF及PDF转Word,并提供了具体代码示例和注意事项。
    1298 89
    |
    JavaScript
    VUE中el-input阻止冒泡防止触发父级事件
    VUE中el-input阻止冒泡防止触发父级事件
    867 130
    |
    监控 数据可视化 测试技术
    如何优雅地处理 API 版本控制?
    API 版本控制是确保 API 升级不影响现有用户的关键。通过管理多个版本,开发者可以推出新功能或修复问题,同时保留旧版本以常见的版本控制方式包括 URL 路径、查询参数和请求头版本控制。优雅处理版本控制需要提前规划、清晰传达变更信息、提供升级指南,并监控版本使用情况。工具如 [APIPost](https://www.apipost.cn) 可助你轻松跟踪版本差异、管理标签并提升团队协作效率。掌握 API 版本控制,结合专业工具,让 API 开发更高效便捷。
    |
    消息中间件 架构师 Dubbo
    免费下载!《Apache RocketMQ 源码解析》带你深入了解Apache RocketMQ
    本书围绕Apache RocketMQ 源码进行多方面分析,包含RocketMQ ACL、RocketMQ 消息轨迹、RocketMQ 多副本之Leader 选主等,带你深入了解Apache RocketMQ。
    26937 0
    免费下载!《Apache RocketMQ 源码解析》带你深入了解Apache RocketMQ