【0202】用户登陆系统 界面跳转 密码用户名校验 事件处理

运行效果如图所示。
在这里插入图片描述
一、涉及知识点
1、线性布局(LinearLayout)
2、标签(TextView)
3、编辑框(EditText)
4、按钮(Button)
5、安卓事件处理机制
6、土司(Toast)
7、意图(Intent)
(1)功能作用:联系安卓不同组件之间的一个重要桥梁。
(2)使用方式:显式使用方式(直接指定目标组件)和隐式使用方式(通过意图过滤器来筛选)
二、实现步骤
1、在上一次界面界面的基础上修改MainActivity名字为LoginActivity ,布局文件activity_main改为activity_login 如图所示:
在这里插入图片描述
在这里插入图片描述

2、使用模板创建新的活动 MainActivity 和 activity_main如图
在这里插入图片描述
在这里插入图片描述

3、activity_login.xml布局资源文件代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:gravity="center"
    android:orientation="vertical"
    android:background="@mipmap/timg"
    tools:context="com.example.a15114.loginstusystem.LoginActivity">


    <TextView
        android:id="@+id/tv_user_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="30dp"
        android:text="@string/user_login"
        android:textColor="#ff0000"
        android:textSize="25sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/tv_user_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/username"
            android:textColor="#000000"
            android:textSize="20sp" />

        <EditText
            android:id="@+id/edt_user_name"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/input_user_name"
            android:maxLines="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/tv_password"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/password"
            android:textColor="#000000"
            android:textSize="20sp" />

        <EditText
            android:id="@+id/edt_password"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="@string/input_password"
            android:inputType="textPassword"
            android:maxLines="1" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dip"
        android:gravity="center_horizontal"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/btn_login"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="30dp"
            android:paddingRight="30dp"
            android:text="@string/login"
            android:textSize="20sp" />

        <Button
            android:id="@+id/btn_cancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingLeft="30dp"
            android:paddingRight="30dp"
            android:text="@string/cancel"
            android:textSize="20sp" />
    </LinearLayout>
</LinearLayout>

4、字符串strings.xml中代码

<resources>
    <string name="app_name">用户登录</string>
    <string name="action_settings">设置</string>
    <string name="user_login">用户登录</string>
    <string name="username">用户:</string>
    <string name="password">密码:</string>
    <string name="login">登录</string>
    <string name="cancel">取消</string>
    <string name="input_user_name">输入用户名</string>
    <string name="input_password">输入密码</string>
    <string name="title_activity_main">主窗口</string>
    <string name="hello_world">Hello world!</string>

</resources>

5、在LoginActivity中声明变量,并获取用户输入的字符串,当按钮被按下时,响应事件处理。

package com.example.a15114.loginstusystem;

        import android.app.Activity;
        import android.content.Intent;
        import android.os.Bundle;
        import android.text.TextUtils;
        import android.view.View;
        import android.view.View.OnClickListener;
        import android.widget.Button;
        import android.widget.EditText;
        import android.widget.Toast;

        import java.util.HashMap;
        import java.util.Map;

public class LoginActivity extends Activity {
    /**
     * 用户名编辑框
     */
    private EditText edtUserName;
    /**
     * 密码编辑框
     */
    private EditText edtPassword;
    /**
     * 登录按钮
     */
    private Button btnLogin;
    /**
     * 取消按钮
     */
    private Button btnCancel;
    Map<String,String> hashMap=new HashMap<String, String>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_login);
        hashMap.put("admin","123");
        hashMap.put("user","1234");
        hashMap.put("student","12345");
        hashMap.put("teacher","123456");
        hashMap.put("user1","1");
        // 通过资源索引获得界面控件实例
        edtUserName = (EditText) findViewById(R.id.edt_user_name);
        edtPassword = (EditText) findViewById(R.id.edt_password);
        btnLogin = (Button) findViewById(R.id.btn_login);
        btnCancel = (Button) findViewById(R.id.btn_cancel);

        // 给登录按钮注册监听器,实现监听器接口,编写事件处理方法
        btnLogin.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // 保存用户输入的数据:用户名与密码
                String strUserName = edtUserName.getText().toString().trim();
                String strPassword = edtPassword.getText().toString().trim();
                String str=new String();
                str= hashMap.get(strUserName);



                // 非空校验
                if (TextUtils.isEmpty(edtUserName.getText()) || TextUtils.isEmpty(edtPassword.getText())) {
                    Toast.makeText(LoginActivity.this, "用户名和密码不能为空!", Toast.LENGTH_LONG).show();
                    return;
                }

                // 判断用户名与密码是否正确(假定用户名与密码都是“admin”)
                if (strPassword.equals(str)) {
                    Toast.makeText(LoginActivity.this, "恭喜,用户名与密码正确!", Toast.LENGTH_LONG).show();
                    // 创建意图,参数1:上下文环境;参数2:目标窗口
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    // 创建Bundle对象,用于封装数据(各种数据类型)
                    Bundle bundle = new Bundle();
                    bundle.putString("username", strUserName);
                    bundle.putString("password", strPassword);
                    // 利用意图来传递数据包
                    intent.putExtras(bundle);
                    // 按意图启动窗口
                    startActivity(intent);
                } else {
                    int i=0;

                    for (String key : hashMap.keySet()) {
                        if (key.equals(strUserName)) {
                            Toast.makeText(LoginActivity.this, "密码错误", Toast.LENGTH_SHORT).show();
                            break;
                        }
                        i++;
                    }
                    if (i==hashMap.size()){
                        Toast.makeText(LoginActivity.this, "用户名错误", Toast.LENGTH_SHORT).show();
                    }


                }
            }
        });

        // 给取消按钮注册监听器,实现监听器接口,编写事件处理方法
        btnCancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                finish();
            }
        });
    }
}

5、MainActivity中的代码

package com.example.a15114.loginstusystem;


        import android.app.Activity;
        import android.content.Intent;
        import android.os.Bundle;
        import android.text.TextUtils;
        import android.widget.TextView;

public class MainActivity extends Activity {

    /**
     * 显示用户信息的标签
     */
    private TextView tvUserInfo;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // 利用布局资源文件设置用户界面
        setContentView(R.layout.activity_main);

        // 利用资源索引获得界面控件实例
        tvUserInfo = (TextView) findViewById(R.id.tv_user_info);

        // 获取从起始窗口传递过来的意图
        Intent intent = getIntent();

        if (intent != null) {
            // 获取意图中携带的数据包
            Bundle data = intent.getExtras();
            // 获取数据包里的每项数据(按键取值)
            String strUserName = data.getString("username");
            String strPassword = data.getString("password");

            // 利用获得的数据更新用户信息标签
            //tvUserInfo.setText("用户名:" + strUserName + "\n密 码:" + strPassword);

            // 利用获得的数据更新用户信息标签
            tvUserInfo.setText(String.format("用户名:%s\n密码:%s", strUserName, strPassword));
        }
    }
}

6、activity_main.xml中的代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@mipmap/mainback"

    android:padding="10dp">
    <TextView
        android:id="@+id/tv_user_info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#0000ff"
        android:textSize="25sp" />

</LinearLayout>

7、在项目清单文件中加入红框中的代码
在这里插入图片描述
三、问题小结
1、跳转利用意图,显式使用方式,直接指定目标组件
2、数据传递问题
源组件(发送方):利用Bundle来封装多项数据(键值对的方式),然后利用intent的putExtras方法携带数据。
目标组件(接收方):
(1)利用getIntent()方法获得意图对象intent
(2)通过intent的getExtras()获得数据包data
(3)通过data的getXXX()方法按键取值

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值