主頁 > 移動端開發 > Android注冊登錄頁面

Android注冊登錄頁面

2021-09-22 16:14:01 移動端開發

Android注冊登錄頁面

  • 需求
  • 分析
  • 專案目錄
    • .java
      • domain
        • JsonBean.java
        • UserInfo.java
      • utils
        • GetJsonDataUtil.java
      • Login.java
      • MainActivity.java
      • Result.java
      • Welcome.java
    • .xml
      • activity_login.xml
      • activity_main.xml
      • activity_result.xml
      • activity_result.xml
    • AndroidManifest.xml
  • 頁面效果
    • 注冊頁面
    • 注冊成功頁面
    • 登錄頁面
    • 登錄成功頁面
  • 點擊可自行下載

需求

主題:網抑云
用戶注冊
(賬號 密碼 性別 愛好…)
(注冊完成跳轉到注冊成功頁面)
注冊成功頁面
(顯示用戶注冊的詳細資訊)
(可以跳轉到登錄頁面)
登錄頁面
(使用用戶注冊時的賬號密碼登錄)
(進行判斷)
登錄成功頁面
(歡迎XXX(用戶注冊時的昵稱)先生/女士

分析

不能使用回車多行輸入
賬號(不可為空)
密碼(不可為空)(隱藏的)
確認密碼(比對)
昵稱(不可為空)
性別(單選)
愛好(多選)
簡介
簡介可以為空,其他全部非空
inputType屬性實作限制輸入型別
點擊注冊 如果有空(吐司提示XXX不可為空) 從上到下提示
注冊完畢之后:
跳轉到注冊成功頁面

專案目錄

在這里插入圖片描述

.java

domain

JsonBean.java

package top.gaojc.app.domain;

import com.contrarywind.interfaces.IPickerViewData;

import java.util.List;

public class JsonBean implements IPickerViewData {

    private String name;
    private List<CityBean> city;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<CityBean> getCityList() {
        return city;
    }

    public void setCityList(List<CityBean> city) {
        this.city = city;
    }

    // 實作 IPickerViewData 介面,
    // 這個用來顯示在PickerView上面的字串,
    // PickerView會通過IPickerViewData獲取getPickerViewText方法顯示出來,
    @Override
    public String getPickerViewText() {
        return this.name;
    }


    public static class CityBean {

        private String name;
        private List<String> area;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public List<String> getArea() {
            return area;
        }

        public void setArea(List<String> area) {
            this.area = area;
        }
    }

}

UserInfo.java

package top.gaojc.app.domain;

public class UserInfo {

    // 賬號
    public static String zhanghao;

    // 密碼
    public static String mima;

    // 確認密碼
    public static String queren;

    // 昵稱
    public static String nicheng;

    // 性別
    public static String xingbie;

    // 愛好
    public static String aihao;

    // 簡介
    public static String jianjie;


    public String getZhanghao() {
        return zhanghao;
    }

    public void setZhanghao(String zhanghao) {
        this.zhanghao = zhanghao;
    }

    public String getMima() {
        return mima;
    }

    public void setMima(String mima) {
        this.mima = mima;
    }

    public String getQueren() {
        return queren;
    }

    public void setQueren(String queren) {
        this.queren = queren;
    }

    public String getNicheng() {
        return nicheng;
    }

    public void setNicheng(String nicheng) {
        this.nicheng = nicheng;
    }

    public String getXingbie() {
        return xingbie;
    }

    public void setXingbie(String xingbie) {
        this.xingbie = xingbie;
    }

    public String getAihao() {
        return aihao;
    }

    public void setAihao(String aihao) {
        this.aihao = aihao;
    }

    public String getJianjie() {
        return jianjie;
    }

    public void setJianjie(String jianjie) {
        this.jianjie = jianjie;
    }

}

utils

GetJsonDataUtil.java

package top.gaojc.app.utils;

import android.content.Context;
import android.content.res.AssetManager;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class GetJsonDataUtil {
    public String getJson(Context context, String fileName) {
        StringBuilder stringBuilder = new StringBuilder();
        try {
            AssetManager assetManager = context.getAssets();
            BufferedReader bf = new BufferedReader(new InputStreamReader(
                    assetManager.open(fileName)));
            String line;
            while ((line = bf.readLine()) != null) {
                stringBuilder.append(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }

}

Login.java

package top.gaojc.app;

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

import androidx.appcompat.app.AppCompatActivity;

import top.gaojc.app.domain.UserInfo;

public class Login extends AppCompatActivity {

    // 初始化
    Button login;

    EditText edt_account;

    EditText edt_password;

    // 用戶注冊時的賬號密碼
    String zhanghao;

    String mima;

    // 用戶登錄時的賬號密碼
    String account;

    String password;


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

        // 系結
        login = findViewById(R.id.login);
        edt_account = findViewById(R.id.account);
        edt_password = findViewById(R.id.password);

        // 獲取用戶注冊時的賬號和密碼
        UserInfo userInfo = new UserInfo();
        zhanghao = userInfo.getZhanghao();
        mima = userInfo.getMima();

        // 監聽點擊事件
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                // 獲取用戶登錄時輸入的賬號密碼
                account = edt_account.getText().toString();
                password = edt_password.getText().toString();

                // 判斷用戶注冊時的賬號密碼和登錄輸入的賬號密碼是否一致
                if (zhanghao.equals(account) == true && mima.equals(password) == true){
                    // 登錄成功 跳轉登錄成功頁面
                    Intent intent = new Intent(Login.this,Welcome.class);
                    startActivity(intent);
                }else {
                    // 提示用戶賬號或密碼錯誤
                    Toast.makeText(Login.this,"賬號或密碼錯誤",Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

}

MainActivity.java

package top.gaojc.app;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import com.bigkoo.pickerview.builder.OptionsPickerBuilder;
import com.bigkoo.pickerview.listener.OnOptionsSelectListener;
import com.bigkoo.pickerview.view.OptionsPickerView;
import com.google.gson.Gson;

import org.json.JSONArray;

import java.util.ArrayList;

import top.gaojc.app.domain.JsonBean;
import top.gaojc.app.domain.UserInfo;
import top.gaojc.app.utils.GetJsonDataUtil;

public class MainActivity extends AppCompatActivity {

    // 初始化

    // 省市區聯動
    private TextView mTxt;
    private ArrayList<JsonBean> options1Items = new ArrayList<>(); //省
    private ArrayList<ArrayList<String>> options2Items = new ArrayList<>();//市
    private ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<>();//區

    // 賬號
    EditText account;

    // 密碼
    EditText password;

    // 確認密碼
    EditText confirmPassword;

    // 昵稱
    EditText username;

    // 性別 男
    RadioButton rb_man;

    // 性別 女
    RadioButton rb_woman;

    // 愛好 吃
    CheckBox eat;

    // 愛好 喝
    CheckBox drink;

    // 愛好 玩
    CheckBox play;

    // 愛好 樂
    CheckBox happy;

    // 簡介
    EditText presentation;

    // 注冊按鈕
    Button register;


    // 結果

    // 賬號
    String zhanghao;

    // 輸入框 密碼
    String mima;

    // 輸入框 確認密碼
    String queren;

    // 輸入框 昵稱
    String nicheng;

    // 給數字賦值 判斷男女
    int gender;

    // 按鈕 性別
    String xingbie;

    // 愛好
    String aihao;

    // 輸入框 簡介
    String jianjie;


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

        // 省市區聯動方法
        initView();
        initData();

        // 系結
        // 賬號
        account = findViewById(R.id.edt_account);

        // 密碼
        password = findViewById(R.id.edt_password);

        // 確認密碼
        confirmPassword = findViewById(R.id.edt_confirmPassword);

        // 昵稱
        username = findViewById(R.id.edt_username);

        // 性別
        rb_man = findViewById(R.id.rb_man);
        rb_woman = findViewById(R.id.rb_woman);

        // 愛好
        eat =  findViewById(R.id.cb_eat);
        drink = findViewById(R.id.cb_drink);
        play = findViewById(R.id.cb_play);
        happy = findViewById(R.id.cb_happy);

        // 簡介
        presentation = findViewById(R.id.edt_presentation);

        // 注冊按鈕
        register = findViewById(R.id.btn_register);


        // 監聽點擊事件
        register.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 獲取賬號
                zhanghao = account.getText().toString();

                // 獲取密碼
                mima = password.getText().toString();

                // 獲取確認密碼
                queren = confirmPassword.getText().toString();

                // 獲取昵稱
                nicheng = username.getText().toString();

                // 獲取性別
                rb_woman.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        gender = 1;
                    }
                });

                if (gender == 1){
                    xingbie = "女";
                }else {
                    xingbie = "男";
                }

                // 獲取愛好
                StringBuilder stringBuilder = new StringBuilder();
                if (eat.isChecked()){
                    stringBuilder.append("吃、");
                }
                if (drink.isChecked()){
                    stringBuilder.append("喝、");
                }
                if (play.isChecked()){
                    stringBuilder.append("玩、");
                }
                if (happy.isChecked()){
                    stringBuilder.append("樂");
                }

                // 獲取字串最后一個字符
                String str = stringBuilder.charAt(stringBuilder.length() - 1) + "";

                // 如果最后一個符號是、 則剪切掉
                if (str.equals("、")){
                    aihao = stringBuilder.substring(0,stringBuilder.length() - 1);
                }else {
                    aihao = stringBuilder.toString();
                }

                // 獲取簡介
                jianjie = presentation.getText().toString();


                // 賬號密碼昵稱校驗
                if (zhanghao.equals("") == false && zhanghao.length() != 0 &&
                        mima.equals("") == false && mima.length() != 0 && mima.equals(queren) == true &&
                        nicheng.equals("") == false && nicheng.length() != 0)
                {
                    // 資料存盤
                    UserInfo userInfo = new UserInfo();
                    userInfo.setZhanghao(zhanghao);
                    userInfo.setMima(mima);
                    userInfo.setQueren(queren);
                    userInfo.setNicheng(nicheng);
                    userInfo.setXingbie(xingbie);
                    userInfo.setAihao(aihao);
                    userInfo.setJianjie(jianjie);

                    // 跳轉
                    Intent intent = new Intent(MainActivity.this, Result.class);
                    startActivity(intent);

                } else if (zhanghao.equals("") == true || zhanghao.length() == 0){
                    Toast.makeText(MainActivity.this,"賬號不允許為空!",Toast.LENGTH_SHORT).show();
                }else if (mima.equals("") == true || mima.length() == 0){
                    Toast.makeText(MainActivity.this,"密碼不允許為空!",Toast.LENGTH_SHORT).show();
                } else if (mima.equals(queren) == false){
                    Toast.makeText(MainActivity.this,"兩次密碼不一致!",Toast.LENGTH_SHORT).show();
                }else if (nicheng.equals("") == true || nicheng.length() == 0){
                    Toast.makeText(MainActivity.this,"昵稱不允許為空!",Toast.LENGTH_SHORT).show();
                }

            }
        });
    }


    private void initData() {
        /**
         * 注意:assets 目錄下的Json檔案僅供參考,實際使用可自行替換檔案
         * 關鍵邏輯在于回圈體
         * */
        String JsonData = new GetJsonDataUtil().getJson(this, "province.json");//獲取assets目錄下的json檔案資料

        ArrayList<JsonBean> jsonBean = parseData(JsonData);//用Gson 轉成物體

        /**
         * 添加省份資料
         * 注意:如果是添加的JavaBean物體,則物體類需要實作 IPickerViewData 介面,
         * PickerView會通過getPickerViewText方法獲取字串顯示出來,
         */
        options1Items = jsonBean;

        for (int i = 0; i < jsonBean.size(); i++) {//遍歷省份
            ArrayList<String> CityList = new ArrayList<>();//該省的城市串列(第二級)
            ArrayList<ArrayList<String>> Province_AreaList = new ArrayList<>();//該省的所有地區串列(第三級)

            for (int c = 0; c < jsonBean.get(i).getCityList().size(); c++) {//遍歷該省份的所有城市
                String CityName = jsonBean.get(i).getCityList().get(c).getName();
                CityList.add(CityName);//添加城市
                ArrayList<String> City_AreaList = new ArrayList<>();//該城市的所有地區串列

                //如果無地區資料,建議添加空字串,防止資料為null 導致三個選項長度不匹配造成崩潰
                if (jsonBean.get(i).getCityList().get(c).getArea() == null
                        || jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {
                    City_AreaList.add("");
                } else {
                    City_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
                }
                Province_AreaList.add(City_AreaList);//添加該省所有地區資料
            }
            //添加城市資料
            options2Items.add(CityList);
            //添加地區資料
            options3Items.add(Province_AreaList);
        }
    }


    private void initView() {
        mTxt = (TextView) findViewById(R.id.txt);

        mTxt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showPickerView();
            }
        });
    }

    private void showPickerView() {
        OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
            @Override
            public void onOptionsSelect(int options1, int options2, int options3, View v) {
                //回傳的分別是三個級別的選中位置
                mTxt.setText(options1Items.get(options1).getPickerViewText() + "  "
                        + options2Items.get(options1).get(options2) + "  "
                        + options3Items.get(options1).get(options2).get(options3));

            }
        })
                .setTitleText("城市選擇")
                .setTitleBgColor(Color.WHITE)//設定標題的背景顏色
                .setDividerColor(Color.BLACK)//設定分割線的顏色
                .setTextColorCenter(Color.BLACK) //設定選中項文字顏色
                .setContentTextSize(20)
                .build();
        pvOptions.setPicker(options1Items, options2Items, options3Items);//三級選擇器
        pvOptions.show();
    }

    public ArrayList<JsonBean> parseData(String result) {//Gson 決議
        ArrayList<JsonBean> detail = new ArrayList<>();
        try {
            JSONArray data = new JSONArray(result);
            // 通過建構式來獲取
            Gson gson = new Gson();
            for (int i = 0; i < data.length(); i++) {
                JsonBean entity = gson.fromJson(data.optJSONObject(i).toString(), JsonBean.class);
                detail.add(entity);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return detail;
    }
}

Result.java

package top.gaojc.app;

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

import androidx.appcompat.app.AppCompatActivity;

import top.gaojc.app.domain.UserInfo;

public class Result extends AppCompatActivity {

    // 初始化
        // 回傳值
    TextView result;

        // 登錄按鈕
    Button login;

    // 賬號
    String zhanghao;

    // 密碼
    String mima;

    // 昵稱
    String nicheng;

    // 性別
    String xingbie;

    // 愛好
    String aihao;

    // 簡介
    String jianjie;


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

        // 系結
        result = findViewById(R.id.tv_result);

        login = findViewById(R.id.btn_login);

        // 用戶資訊物件
        UserInfo userInfo = new UserInfo();

        // 獲取用戶資訊
        zhanghao = userInfo.getZhanghao();
        mima = userInfo.getMima();
        nicheng = userInfo.getNicheng();
        xingbie = userInfo.getXingbie();
        aihao = userInfo.getAihao();
        jianjie = userInfo.getJianjie();

        // 設定顯示的資料
        result.setText("賬號:" + zhanghao + "\n密碼:" + mima + "\n昵稱:" + nicheng + "\n性別:" + xingbie + "\n愛好:" + aihao + "\n簡介:" + jianjie);

        // 監聽事件
        login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Result.this, Login.class);
                startActivity(intent);
            }
        });
    }
}

Welcome.java

package top.gaojc.app;

import android.os.Bundle;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

import top.gaojc.app.domain.UserInfo;

public class Welcome extends AppCompatActivity {

    // 初始化
    TextView register;

    String nicheng;

    String xingbie;

    // 稱謂 先生 or 女士
    String appellation;

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

        // 系結
        register = findViewById(R.id.tv_register);

        // 獲取用戶的昵稱和性別
        UserInfo userInfo = new UserInfo();
        nicheng = userInfo.getNicheng();
        xingbie = userInfo.getXingbie();

        // 判斷男女 昵稱后面跟稱謂
        if (xingbie.equals("男")){
            appellation = "先生";
        }else {
            appellation = "女士";
        }

        // 輸出內容的拼接
        String text = "歡迎" + nicheng + appellation + "!";

        // 列印
        register.setText(text);
    }
}

.xml

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"
    tools:context=".Login"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="用戶登錄"
        android:layout_gravity="center"
        android:textSize="25sp"/>

    <TextView
        android:id="@+id/txt"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:gravity="center"
        android:layout_centerInParent="true" />

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="賬號" />

        <EditText
            android:id="@+id/account"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"/>

    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="密碼" />

        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"/>

    </LinearLayout>

    <Button
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:text="登錄"/>
</LinearLayout>

activity_main.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"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="用戶注冊"
        android:layout_gravity="center"
        android:textSize="25sp"/>

    <TextView
        android:id="@+id/txt"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:gravity="center"
        android:layout_centerInParent="true" />

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="賬號" />

        <EditText
            android:id="@+id/edt_account"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"/>

    </LinearLayout>

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

        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密碼" />

        <EditText
            android:id="@+id/edt_password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"/>

    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="確認密碼" />

        <EditText
            android:id="@+id/edt_confirmPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textPassword"/>

    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="昵稱" />

        <EditText
            android:id="@+id/edt_username"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"/>

    </LinearLayout>

    <RadioGroup
        android:id="@+id/rg_gender"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="性別"/>

        <RadioButton
            android:id="@+id/rb_man"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            android:checked="true"/>

        <RadioButton
            android:id="@+id/rb_woman"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""/>

    </RadioGroup>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="愛好"/>

        <CheckBox
            android:id="@+id/cb_eat"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""/>

        <CheckBox
            android:id="@+id/cb_drink"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="" />

        <CheckBox
            android:id="@+id/cb_play"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""/>

        <CheckBox
            android:id="@+id/cb_happy"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""/>

    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="簡介" />

        <EditText
            android:id="@+id/edt_presentation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true"/>

    </LinearLayout>

    <Button
        android:id="@+id/btn_register"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="注冊"
        android:layout_gravity="center"
        android:textSize="20sp"
        android:layout_marginTop="35dp"/>

</LinearLayout>

activity_result.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".Result">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="注冊成功!"
        android:layout_above="@id/tv_result"
        android:layout_centerHorizontal="true"
        android:textColor="#00ff99"
        android:textSize="30sp"/>

    <!-- 回傳內容-->
    <TextView
        android:id="@+id/tv_result"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"/>

    <Button
        android:id="@+id/btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_result"
        android:layout_centerHorizontal="true"
        android:text="去登錄"/>

</RelativeLayout>

activity_result.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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=".Welcome">

    <TextView
        android:id="@+id/tv_register"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="30sp"/>

</RelativeLayout>

AndroidManifest.xml

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

    <application
        android:allowBackup="true"
        android:icon="@drawable/wyy"
        android:label="@string/app_name"
        android:roundIcon="@drawable/wyy"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Login"/>
        <activity android:name=".Result" />
        <activity android:name=".Welcome" />
        <activity android:name=".domain.UserInfo"/>
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

頁面效果

注冊頁面

請添加圖片描述

注冊成功頁面

請添加圖片描述

登錄頁面

請添加圖片描述

登錄成功頁面

請添加圖片描述

點擊可自行下載

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/302086.html

標籤:其他

上一篇:Android 實戰中提高Handler發送訊息的優先級

下一篇:怎樣寫好Flutter代碼

標籤雲
其他(123570) Java(13369) Python(12731) C(7545) 區塊鏈(7372) JavaScript(7059) 基礎類(6313) AI(6244) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4120) MySQL(4012) Linux(3394) C語言(3288) C++語言(3117) Java相關(2746) 疑難問題(2699) 單片機工控(2479) Web開發(1951) 網絡通信(1793) 數據庫相關(1767) VB基礎類(1755) PHP(1727) 開發(1646) 系統維護與使用區(1617) .NETCore(1586) 基礎和管理(1579) JavaEE(1566) C++(1527) 專題技術討論區(1515) Windows客戶端使用(1484) HtmlCss(1466) ASP.NET(1428) Unity3D(1354) VCL組件開發及應用(1353) HTML(CSS)(1220) 其他技術討論專區(1200) WindowsServer(1192) .NET技术(1165) 交換及路由技術(1149) 語言基礎算法系統設計(1133) WindowsSDKAPI(1124) 界面(1088) JavaSE(1075) Qt(1074) VBA(1048) 新手樂園(1016) 其他開發語言(947) Go(907) HTML5(901) 新技術前沿(898) 硬件設計(872) 區塊鏈技術(860) 網絡編程(857) 非技術版(846) 一般軟件使用(839) 網絡協議與配置(835) Eclipse(790) Spark(750) 下載資源懸賞專區(743)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 如何在C中找到鍵/值字典的大小

    我對 C 很陌生,我正在學習使用結構和指標,但我似乎無法弄清楚我在這里做錯了什么。所以我試圖找到每次呼叫 main 函式時都會重置的字典的大小。當我嘗試手動運行代碼時,它會說...

    uj5u.com 2021-10-16 17:05:42 more
  • 如何在將指標作為引數的函式內釋放結構指標

    編輯*我正在學習結構和指標,我正在處理的部分任務要求我釋放 malloc 的空間以用于結構指標。指標作為函式內部的引數傳遞,我想知道是否可以釋放函式內部的空間?指標在主檔案中...

    uj5u.com 2021-10-16 17:05:10 more
  • 同時擁有名稱和指向結構的指標是否有意義?

    typedef struct net_path_s{ uint8 path_len; /* network path length */ uint8 net_path[2 * MAX_ROUTE_LEN]; /* network path */} net...

    uj5u.com 2021-10-16 17:04:34 more
  • Python的記憶體行為

    我有一個串列,它會變得非常大。所以我會將串列保存在我的硬碟上,然后繼續使用一個空串列。我的問題是:當我執行 myList[] 時,舊資料會被洗掉還是會保留在 Ram 上的某個地方。我...

    uj5u.com 2021-10-16 17:04:05 more
  • 僅使用帶有鍵的unordered_map來存盤指標(忽略值)

    我正在實施一種演算法,該演算法檢查網格中的節點是否具有特定值。要存盤有關我已經檢查過的節點的資訊,我想使用 unordered_map 并將指向該節點的指標作為鍵。然后我可以簡單...

    uj5u.com 2021-10-16 17:03:06 more
  • 如何在同一頁面上向下滾動并顯示章節?

    我正在開發一個單頁網站,當用戶點擊一個特定的按鈕時,應該向下滾動到頁面的另一個部分。
    因為我使用了粘性標題,所以該部分的標題被隱藏在橫幅后面,所以我使用下面的代碼在點擊...

    uj5u.com 2021-10-16 15:31:29 more
  • 是否有辦法在gradle.build檔案中擴展或創建不同的jib配置?

    我正在使用jib插件來為我的springboot應用構建docker鏡像。然而,我希望在我的構建檔案中有一個新的任務,它將呼叫不同的構建jib任務。
    其原因是,根據我在 gradle 中創建的任務,...

    uj5u.com 2021-10-16 15:31:10 more
  • 未生成Apollo目錄

    我在初步實施中遇到了困難。
    我的問題是,下面的構建無法生成apollo目錄。
    用這個gradle(應用程式級別)
    plugins {
    id 'com.android.application'/span>
    id 'kotlin-androi...

    uj5u.com 2021-10-16 15:30:57 more
  • 引數型別'PointerEvent'不能分配給引數型別'PointerDownEvent'。

    最近,我更新到了flutter 2.5和最新的androids studio,并試圖將我的flutter專案編譯到android設備上。Android studio向我拋出了下面的錯誤。如果我在終端寫flutter run,編譯到...

    uj5u.com 2021-10-16 15:30:43 more
  • 如何使用then()并在Cypress中獲取數值

    我有一個span元素,它的值是2,我想檢查它的值是否大于0,但在網上查詢并實施了所有方法后,它沒有作業......
    下面是我記錄$span時的控制臺> 2</span>
    </div>

    cy.get(" .badge....

    uj5u.com 2021-10-16 15:28:04 more