参考: https://www.bilibili.com/video/BV1PjHfeXE8U/?p=2&share_source=copy_web&vd_source=c9694360d733f13ad9f5d6eca716d826

准备

新建项目,选择Empty view activity,注意打开后将页面一直调到project视图。语言要改成java

下载sdk:

sdk:软件开发工具包,可以将你的代码编译为app来用

 选择虚拟器

选择device manager,选择默认的屏幕,选择对应模拟器的操作系统,不同操作系统对应不同的target

在mainactivity.java开始运行,可以正常运行。

 建立和设计窗口

 在mainactivit同一个文件夹下方新建两个empty view activity,命名为loginActivity和regestActivity

找到AndroidMainifest.xml这个文件,找到android:name=".MainActivity"这一栏,改变第一个入口界面为loginActivity

ps:怎么理解AndroidMainifest.xml这个xml文件?

定义了应用的基本信息和组件配置

<?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                            <!--application 标签定义了应用的全局设置-->
    android:allowBackup="true"  <!--表示应用允许用户备份数据-->
    android:dataExtractionRules="@xml/data_extraction_rules" 
    android:fullBackupContent="@xml/backup_rules"
    android:icon="@mipmap/ic_launcher"    <!--应用的图标,这里引用了 mipmap/ic_launcher 作为图标资源-->
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/Theme.Login_r"
    tools:targetApi="31" >
    <activity
      android:name=".regestActivity"  
      android:exported="false" />
    <activity
      android:name=".Login_activity"
      android:exported="false" />
    <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>
      <!--<intent-filter>:定义了一个意图过滤器,用来指定该活动是主活动,并可以响应系统的启动请求:
<action android:name="android.intent.action.MAIN" />:表示这是应用的主入口活动。
<category android:name="android.intent.category.LAUNCHER" />:表示该活动可以作为应用的启动项,出现在设备的应用列表中。-->
    </activity>
  </application>

</manifest>

按住ctrl,跳转login对应的xml文件 -> splite ,可以编辑xml代码区。你用其他方法图像设计也可以

改变主题色调、插入图像:

进入theme.xml

colors.xml:可以在这里定义颜色名字(把#FFFFFF改成“white”什么的);

定义方式:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="my_theme">#ffb241</color>
</resources>

图片素材(png)一般下载下来放在mipmap的子文件夹里面,比如我随便粘贴了一些截图到C:\Users\lenovo\AndroidStudioProjects\login_r\app\src\main\res\mipmap-xxxhdpi下面

打开前端xml文件后可以直接在splite模式下拖动 ImageView到组件树去插入图片

增加“密码”“箭头”等小图标方法:

比如说这个头像小图标。

在C:\Users\lenovo\AndroidStudioProjects\login_r\app\src\main\res\drawable\下建立新Vecter Asset,选择设计自己想要的图标保存,在组件中使用android:src="图标路径"即可。

 <ImageView
                android:layout_gravity="center_vertical"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/baseline_account_box_24"/>

登录、注册界面最终效果和xml代码: 

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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:id="@+id/main"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:background="@color/black"
  android:layout_height="match_parent"
  tools:context=".Login_activity">

  <ImageView
    android:id="@+id/imageView5"
    android:layout_width="match_parent"
    android:layout_height="400dp"
    android:scaleType="centerCrop"
    app:srcCompat="@mipmap/login"
    android:contentDescription="@null"/>

  <TextView
    android:id="@+id/textView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:textSize="20sp"
    android:textStyle="bold"
    android:layout_margin="20dp"
    android:textColor="@color/white"
    android:text="登录" />

  <androidx.appcompat.widget.LinearLayoutCompat
    android:layout_width="match_parent"
    android:layout_margin="26dp"
    android:orientation="vertical"
    android:layout_height="wrap_content">

    <androidx.appcompat.widget.LinearLayoutCompat
      android:layout_width="match_parent"
      android:background="@drawable/loginbg"
      android:paddingLeft="10dp"
      android:paddingRight="50dp"
      android:layout_height="50dp">
      <ImageView
        android:layout_gravity="center_vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/baseline_account_box_24"/>
      <EditText
        android:layout_width="match_parent"
        android:layout_marginLeft="10dp"
        android:background="@null"
        android:hint="请输入用户名"
        android:textSize="14sp"
        android:layout_height="match_parent"
        />

    </androidx.appcompat.widget.LinearLayoutCompat>
    <TextView
      android:id="@+id/textView1"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:gravity="center"
      android:textSize="20sp"
      android:textStyle="bold"
      android:layout_margin="1dp"
      android:textColor="@color/white"
      />
    <androidx.appcompat.widget.LinearLayoutCompat
      android:layout_width="match_parent"
      android:background="@drawable/loginbg"
      android:paddingLeft="10dp"
      android:paddingRight="50dp"
      android:layout_height="50dp">
      <ImageView
        android:layout_gravity="center_vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
                android:src="@drawable/baseline_lock_open_24"/>
            <EditText
                android:layout_width="match_parent"
                android:layout_marginLeft="10dp"
                android:background="@null"
                android:hint="请输入密码"
                android:textSize="14sp"
                android:inputType="textPassword"
                android:layout_height="match_parent"
                />


        </androidx.appcompat.widget.LinearLayoutCompat>

        <TextView
            android:id="@+id/textView4"
            android:textColor="@color/white"
            android:layout_gravity="right"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="还未注册?" />

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


    </androidx.appcompat.widget.LinearLayoutCompat>

</androidx.appcompat.widget.LinearLayoutCompat>

注册: 注册的代码差不多,加了个返回键  

 

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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:id="@+id/main"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:background="@color/black"
    android:layout_height="match_parent"
    tools:context=".Login_activity">

  <androidx.appcompat.widget.Toolbar
      android:id="@+id/return_login"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      app:navigationIcon="@drawable/baseline_arrow_back_24"
      app:titleTextColor="@color/white"
      app:title="返回" />

  <ImageView

      android:id="@+id/imageView5"
      android:layout_width="match_parent"
      android:layout_height="350dp"
      android:scaleType="centerCrop"
      app:srcCompat="@mipmap/login"
      android:contentDescription="@null"/>

  <TextView
      android:id="@+id/textView"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:gravity="center"
      android:textSize="20sp"
      android:textStyle="bold"
      android:layout_margin="10dp"
      android:textColor="@color/white"
      android:text="注册" />

  <androidx.appcompat.widget.LinearLayoutCompat
      android:layout_width="match_parent"
      android:layout_margin="26dp"
      android:orientation="vertical"
      android:layout_height="wrap_content">

    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:background="@drawable/loginbg"
        android:paddingLeft="10dp"
        android:paddingRight="50dp"
        android:layout_height="50dp">
      <ImageView
          android:layout_gravity="center_vertical"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/baseline_account_box_24"/>
      <EditText
          android:id="@+id/et_user_name"
          android:layout_width="match_parent"
          android:layout_marginLeft="10dp"
          android:background="@null"
          android:hint="请输入用户名"
          android:textSize="14sp"
          android:layout_height="match_parent"
          />

    </androidx.appcompat.widget.LinearLayoutCompat>
    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textSize="20sp"
        android:textStyle="bold"
        android:layout_margin="1dp"
        android:textColor="@color/white"
        />
    <androidx.appcompat.widget.LinearLayoutCompat
        android:layout_width="match_parent"
        android:background="@drawable/loginbg"
        android:paddingLeft="10dp"
        android:paddingRight="50dp"
        android:layout_height="50dp">
      <ImageView
          android:layout_gravity="center_vertical"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:src="@drawable/baseline_lock_open_24"/>
      <EditText
          android:id="@+id/et_password"
          android:layout_width="match_parent"
          android:layout_marginLeft="10dp"
          android:background="@null"
          android:hint="请输入密码"
          android:textSize="14sp"
          android:inputType="textPassword"
          android:layout_height="match_parent"
          />


    </androidx.appcompat.widget.LinearLayoutCompat>

    <Button
        android:id="@+id/button_regest"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="注册" />


  </androidx.appcompat.widget.LinearLayoutCompat>

</androidx.appcompat.widget.LinearLayoutCompat>

实现注册

在这之前在对应xml文件给输入框组件(EditText)分别取名:

android:id="@+id/et_username"

android:id="@+id/et_password"

这次使用sharedpreferences储存用户信息:

代码:

package com.example.login_r;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class regestActivity extends AppCompatActivity {
    private EditText et_user_name;
    private EditText et_password;
    private SharedPreferences mSharePreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_regest);
        //初始化控件
        et_user_name = findViewById(R.id.et_user_name);
        et_password = findViewById(R.id.et_password);
        //获取msharePreference
        mSharePreferences =getSharedPreferences("user",MODE_PRIVATE);

        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        //把当前页面销毁掉就可以到登录页面了
        findViewById(R.id.return_login).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });
        //点击注册按钮,获取输入框里面的信息
        findViewById(R.id.button_regest).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String username=et_user_name.getText().toString();
                String password=et_password.getText().toString();

                if(TextUtils.isEmpty(username) && TextUtils.isEmpty(password)){
                    Toast.makeText(regestActivity.this,"请输入用户名和密码",Toast.LENGTH_SHORT).show();
                }else{
                    SharedPreferences.Editor edit=mSharePreferences.edit();
                    edit.putString("username",username);
                    edit.putString("password",password);
                    //提交
                    edit.commit();
                    Toast.makeText(regestActivity.this,"注册成功",Toast.LENGTH_SHORT).show();
                    finish();
                }
            }
        });
    }
}

实现登录

在这之前在对应xml文件给输入框组件(EditText)分别取名:

android:id="@+id/et_username"

android:id="@+id/et_password"(可以和regest的名字一样)

读取sharedpreferences储存用户信息(所以regest和login里两次的sharedpreferences命名要一致):

代码:

package com.example.login_r;

import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class Login_activity extends AppCompatActivity {
    private EditText et_user_name;
    private EditText et_password;
    private SharedPreferences mSharedpreferences;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_login2);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
        //获取mSharepreferences
        mSharedpreferences = getSharedPreferences("user",MODE_PRIVATE);
        //初始化控件
        et_user_name = findViewById(R.id.et_user_name);
        et_password = findViewById(R.id.et_password);

        //点击注册
        findViewById(R.id.textView4).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //跳转到注册页面
                Intent intent = new Intent(Login_activity.this, regestActivity.class);
                startActivity(intent);
            }
        });
        //点击登录
        findViewById(R.id.login_button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String username=et_user_name.getText().toString();
                String password=et_password.getText().toString();
                if(TextUtils.isEmpty(username) && TextUtils.isEmpty(password)){
                    Toast.makeText(Login_activity.this,"请输入用户名和密码",Toast.LENGTH_SHORT).show();
                }else{
                    //取sharepreferce的数据
                    String name = mSharedpreferences.getString("username",null);
                    String pwd = mSharedpreferences.getString("password",null);
                    if (username.equals(name) && password.equals(pwd)){
                        Intent intent = new Intent(Login_activity.this, MainActivity.class);
                        startActivity(intent);
                    }else{
                        Toast.makeText(Login_activity.this,"用户名或密码错误",Toast.LENGTH_SHORT).show();
                    }
                }
            }
        });




    }
}

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐