安卓-实验三 多个用户界面的程序设计

  • Post author:
  • Post category:其他



一、实验目的与要求


(1)了解使用Intent进行组件通信的原理


(2)掌握使用Intent启动Activity的方法


(3)掌握Activity间数据传送的方法


(4)掌握对话框的使用方法


二、实验软





硬件环境

  1. 硬件:PC电脑一台
  2. 配置:winxp、win7、win10系统,内存大于4G,硬盘250G以上,JDK8,Android Studio IDE安装软件


三、实验内容


(1)设计一个主Activity和一个子Activity。主Activity界面上有一个“登录”按钮和一个用于显示信息的TextView,单击“登录”按钮后打开一个新的Activity,新Activity上面有输入用户名、密码的控件,在用户关闭这个Activity后,将用户输入的用户名和密码传递到主Activity,如果用户名和密码正确,则主A


ctivity


上的T


extView


显示“某某用户已登录”,否则弹出一个消息对话框,显示“用户名或密码错误”。


(2)在(1)的主界面上增加一个“注册”按钮。单击“注册”按钮后打开另一个新的A


ctivity


,新的A


ctivity


上除了用户名和密码的控件外,还有“确定”和“取消”按钮,如果单击“确定”按钮,则用户信息在主A


ctivity


的T


extView


上显示,再次登录时该用户名和密码有效;如果单击“取消”按钮,则直接返回主A


ctivity


页面。


(3)在(1)中用对话框的方式显示用户登录界面,实现用户登录功能。

解决方法:

在主Activity的布局文件activity_main.xml中添加“登录”和“注册”按钮以及用于显示信息的TextView。

<?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">


    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/activity_main"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:id="@+id/login_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="登录"/>

        <Button
            android:id="@+id/register_button"
            android:layout_marginTop="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="注册"/>

        <TextView
            android:id="@+id/info_text_view"
            android:layout_marginTop="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""/>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java:

package com.example.asdf;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CODE_LOGIN = 100;
    private static final int REQUEST_CODE_REGISTER = 101;

    private TextView mInfoTextView;
    private String mUsername = "";
    private String mPassword = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mInfoTextView = findViewById(R.id.info_text_view);

        Button loginButton = findViewById(R.id.login_button);
        loginButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
                startActivityForResult(intent, REQUEST_CODE_LOGIN);
            }
        });

        Button registerButton = findViewById(R.id.register_button);
        registerButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this, RegisterActivity.class);
                startActivityForResult(intent, REQUEST_CODE_REGISTER);
            }
        });
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                case REQUEST_CODE_LOGIN:
                    String username = data.getStringExtra("username");
                    String password = data.getStringExtra("password");

                    if (username.equals(mUsername) && password.equals(mPassword)) {
                        mInfoTextView.setText(username + "已登录");
                    } else {
                        AlertDialog.Builder builder = new AlertDialog.Builder(this);
                        builder.setTitle("错误");
                        builder.setMessage("用户名或密码错误");
                        builder.setPositiveButton("确定", null);
                        builder.show();
                    }

                    break;
                case REQUEST_CODE_REGISTER:
                    mUsername = data.getStringExtra("username");
                    mPassword = data.getStringExtra("password");
                    mInfoTextView.setText(mUsername + "已注册");
                    break;
            }
        }
    }
}

在注册页面RegisterActivity中的布局文件register_activity.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">
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/register_activity"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <EditText
            android:id="@+id/username_edit_text"
            android:hint="用户名"
            android:layout_marginTop="20dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

        <EditText
            android:id="@+id/password_edit_text"
            android:hint="密码"
            android:inputType="textPassword"
            android:layout_marginTop="10dp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

        <Button
            android:id="@+id/confirm_button"
            android:text="确定"
            android:layout_marginTop="20dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

        <Button
            android:id="@+id/cancel_button"
            android:text="取消"
            android:layout_marginTop="10dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>

    </LinearLayout>

</LinearLayout>

RegisterActivity.java:

package com.example.asdf;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

import androidx.appcompat.app.AppCompatActivity;

public class RegisterActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.register_activity);

        final EditText usernameEditText = findViewById(R.id.username_edit_text);
        final EditText passwordEditText = findViewById(R.id.password_edit_text);

        Button confirmButton = findViewById(R.id.confirm_button);
        confirmButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String username = usernameEditText.getText().toString().trim();
                String password = passwordEditText.getText().toString().trim();

                Intent intent = new Intent();
                intent.putExtra("username", username);
                intent.putExtra("password", password);
                setResult(RESULT_OK, intent);
                finish();
            }
        });

        Button cancelButton = findViewById(R.id.cancel_button);
        cancelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                setResult(RESULT_CANCELED);
                finish();
            }
        });
    }
}

当然了,引用了两个Java文件,我们也需要在AndroidiMainfest文件做出修改:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.Asdf"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".RegisterActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

运行即可输出结果,格式可以自己调节大小



版权声明:本文为m0_56235386原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。