Android实现用户登录和注册界面

2023-11-15

       我们在做android项目时经常会用到用户登录,这里呈上实现了Spinner的登录界面,初学的朋友可以直接拿过来使用。本界面使用的是流式布局,也是我最喜欢用的布局方式,同学们可以通过代码了解一下。代码中Intent的使用有点杂乱,主要是为了实现界面2选择完地址后,界面1已结填写的类容随着Activity来回传递,避免丢失。如果同学们有更好的实现方法就把那些Intent删除。

 

 

 

主界面MainActivity


import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
    private Spinner spinner;
    private ArrayAdapter<String> adapterspin;
    String spinnertext;
    TextView textView;
    Button btn;
    EditText ed1,ed2,ed3;

    private static final String[] m={"汉族","回族","藏族","壮族","朝鲜族","维吾尔族"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, cs.class);
                intent.putExtra("ed1",ed1.getText().toString() );
                intent.putExtra("ed2",ed2.getText().toString() );
                intent.putExtra("ed3",ed3.getText().toString() );
                startActivity(intent);
            }
        });
        Intent intent =getIntent();
            String dz = intent.getStringExtra("dz");
            String user = intent.getStringExtra("ed1");
            String password = intent.getStringExtra("ed2");
            String rpassword = intent.getStringExtra("ed3");
                ed1.setText(user);
                ed2.setText(password);
                ed3.setText(rpassword);
            textView.setText(dz);


    }
    public void init(){
        spinner=findViewById(R.id.spinner1);
        spinner.setOnItemSelectedListener(new SpinnerSelectedListener());
        adapterspin = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,m);
        adapterspin.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapterspin);
        spinner.setOnItemSelectedListener(new SpinnerSelectedListener());
        spinner.setVisibility(View.VISIBLE);
        btn=findViewById(R.id.button);
        textView=findViewById(R.id.textView10);
        ed1=findViewById(R.id.ed1);
        ed2=findViewById(R.id.ed2);
        ed3=findViewById(R.id.ed3);
    }
    class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener {

        public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
                                   long arg3) {

            spinnertext=m[arg2];

        }

        public void onNothingSelected(AdapterView<?> arg0) {
        }
    }
}

Spinner地址选择界面cs.java


import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class cs extends AppCompatActivity {

    private ListView listView;
    private List<String> mList = new ArrayList<>();
    private List<String> mclist = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cs);
        initList();
        Intent intent = getIntent();
        String ed1=intent.getStringExtra("ed1");
        String ed2=intent.getStringExtra("ed2");
        String ed3=intent.getStringExtra("ed3");
        mclist.add(ed1);
        mclist.add(ed2);
        mclist.add(ed3);
        this.listView = (ListView) findViewById(R.id.listView);

        final MyAdapter adapter = new MyAdapter(cs.this, mList,mclist);
        listView.setAdapter(adapter);
        //ListView item的点击事件
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

            }
        });
        //ListView item 中的删除按钮的点击事件
        adapter.setOnItemDeleteClickListener(new MyAdapter.onItemDeleteListener() {
            @Override
            public void onDeleteClick(int i) {

            }
        });
    }

    /**
     * 初始化数据
     */
    private void initList() {

        mList.add("北京");
        mList.add("上海");
        mList.add("深圳");
        mList.add("杭州");
        mList.add("广州");
        mList.add("杭州");

    }
}

适配器MyAdapter.java


import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;

import java.util.ArrayList;
import java.util.List;

public class MyAdapter extends BaseAdapter {
    private Context mContext;
    private List<String> mList = new ArrayList<>();
    private List<String> mclist = new ArrayList<>();

    public MyAdapter(Context context, List<String> list, List<String> clist) {
        mContext = context;
        mList = list;
        mclist=clist;
    }

    @Override
    public int getCount() {
        return mList.size();
    }

    @Override
    public Object getItem(int i) {
        return mList.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(final int i, View view, ViewGroup viewGroup) {
        ViewHolder viewHolder = null;
        if (view == null) {
            viewHolder = new ViewHolder();
            view = LayoutInflater.from(mContext).inflate(R.layout.list_item, null);
            viewHolder.mTextView = (TextView) view.findViewById(R.id.item_tv);
            viewHolder.mButton =  view.findViewById(R.id.item_btn);
            view.setTag(viewHolder);
        } else {
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.mTextView.setText(mList.get(i));
        viewHolder.mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(mContext, MainActivity.class);
                intent.putExtra("dz",mList.get(i) );
                intent.putExtra("ed1",mclist.get(0) );
                intent.putExtra("ed2",mclist.get(1) );
                intent.putExtra("ed3",mclist.get(2) );
                mContext.startActivity(intent);
            }
        });
        return view;
    }

    /**
     * 删除按钮的监听接口
     */
    public interface onItemDeleteListener {
        void onDeleteClick(int i);
    }

    private onItemDeleteListener mOnItemDeleteListener;

    public void setOnItemDeleteClickListener(onItemDeleteListener mOnItemDeleteListener) {
        this.mOnItemDeleteListener = mOnItemDeleteListener;
    }

    class ViewHolder {
        TextView mTextView;
        Button mButton;
    }

}

对应的XML文件

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"
    android:orientation="vertical"
    android:padding="40dp"
    android:background="#FFFFFF">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        android:layout_marginBottom="20dp"
        android:gravity="center"
        android:orientation="horizontal">
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="用户名:"
        />

    <EditText
        android:id="@+id/ed1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
       />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        android:gravity="center"
        android:layout_marginBottom="20dp"
        android:orientation="horizontal">
    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="密     码:"
      />

    <EditText
        android:id="@+id/ed2"
        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:background="#FFFFFF"
        android:layout_marginBottom="20dp"
        android:gravity="center"
        android:orientation="horizontal">
    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:text="确认密码:"
      />

    <EditText
        android:id="@+id/ed3"
        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:layout_marginBottom="20dp"
        android:background="#FFFFFF"
        android:orientation="horizontal">
    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="民     族:" />
    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:spinnerMode="dropdown"
      />
    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#FFFFFF"
        android:layout_marginBottom="20dp"
        android:orientation="horizontal">
    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="籍      贯:" />
    <Button
        android:id="@+id/button"
        android:layout_width="153dp"
        android:layout_height="46dp"
        android:text="单击选择城市"
       />
        <TextView
            android:id="@+id/textView10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            />
    </LinearLayout>
    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_gravity="center"
        android:layout_height="41dp"
        android:text="提交"
      />

    </LinearLayout>

activity_cs.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:padding="10dp"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>

list_item.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"
    android:padding="20dp"
    android:orientation="horizontal">

    <TextView
        android:id="@+id/item_tv"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="this is text"
        android:textSize="24dp"/>

    <androidx.appcompat.widget.AppCompatRadioButton
        android:focusable="false"
        android:id="@+id/item_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
       />
</LinearLayout>

结束。

后面同学们可以在MainActivity里添加按键的监听实现自己想要的功能了!其他一些改动可以自己完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android实现用户登录和注册界面 的相关文章

  • 在应用程序简历中隐藏软键盘

    我有一个 Android 应用程序 使用 Xamarin 用 C 编写 我已将应用程序简化为包含 TextView 和用于横幅广告的 Google admod AdView 的 LinearLayout 我不希望软键盘出现在应用程序中 这不
  • Android 通知进度条冻结

    这是我正在使用的代码 http pastebin com 3bMCKURu http pastebin com 3bMCKURu 问题是 一段时间后 文件变得更重 通知栏下拉速度变慢 最后它就冻结了 你的通知太频繁了 这就是它冻结的原因 让
  • GCM 向主题发送消息:TOO_MANY_TOPICS 错误

    以前 GCM 每个应用程序有 100 万个主题订阅的限制 我发现他们现在已经取消了这一限制 基于发布 订阅模型 主题消息支持 每个应用程序无限订阅 https developers google com cloud messaging to
  • 如何更新 Firebase 中的节点密钥?

    如何重命名14 04 2017 node 没有用于重命名节点的 API 您必须获取节点的值 使用新名称将其保存到数据库并删除旧节点
  • Firebase Analytics 禁用受众国家/地区跟踪

    我正在开发一个严格不允许位置跟踪的应用程序 我想使用 Firebase Analytic 的其他功能 例如 PageTransitions 和 Crashalitics 但如果我无法禁用受众位置跟踪 我就无法使用其中任何功能 这是我在 An
  • 在自定义对象中创建时粘性服务不会重新启动

    我有一个具有绑定服务的单例对象 我希望它重新启动 当我从启动器启动应用程序时 单例对象将初始化并绑定到这个现有的服务实例 以下是在单例中创建和绑定服务的代码 public class MyState private static MySta
  • 接近语法错误(代码1)插入Android SQLite

    我正在创建一个通讯录应用程序 用户可以在其中输入姓名 电子邮件地址和号码 我希望将此数据保存在数据库中 但我似乎无法使插入方法起作用 我收到的错误是 android database sqlite SQLiteException near
  • 线程自动利用多个CPU核心?

    假设我的应用程序运行 2 个线程 例如渲染线程和游戏更新线程 如果它在具有多核 CPU 当今典型 的移动设备上运行 我是否可以期望线程在可能的情况下自动分配给不同的核心 我知道底层操作系统内核 Android linux内核 决定调度 我的
  • 在 Android 中使用 DataOutputStream 在 POST 正文中发送特殊字符 (ë ä ï)

    我目前正在开发一个具有大量服务器端通信的 Android 应用程序 昨天 我收到一份错误报告 称用户无法发送 简单 特殊字符 例如 我搜索过但没有找到任何有用的东西 可能重复 没有答案 https stackoverflow com que
  • Firebase:如何在Android应用程序中设置默认通知渠道?

    如何设置default通知渠道通知消息当应用程序在后台运行时会出现什么情况 默认情况下 这些消息使用 杂项 通道 如你看到的在官方文档中 https firebase google com docs cloud messaging andr
  • minHeight 有什么作用吗?

    在附图中 我希望按钮列与图像的高度相匹配 但我也希望按钮列有一个最小高度 它正确匹配图像的高度 但不遵守 minHeight 并且会使按钮向下滑动 我正在为按钮列设置这些属性
  • 带有自定义阵列适配器的微调器不允许选择项目

    我使用自定义阵列适配器作为微调器 但是 当在下拉列表中选择一个项目时 下拉列表保留在那里 并且微调器不会更新 这是错误行为 与使用带有字符串的通用数组适配器相比 这是自定义类 我错过了什么吗 谢谢 public class Calendar
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • 如何在C(Linux)中的while循环中准确地睡眠?

    在 C 代码 Linux 操作系统 中 我需要在 while 循环内准确地休眠 比如说 10000 微秒 1000 次 我尝试过usleep nanosleep select pselect和其他一些方法 但没有成功 一旦大约 50 次 它
  • 如何在不更改手机语言的情况下更改Android应用程序语言?

    我希望用户在应用程序内选择一种语言 选择语言后 我希望字符串使用特定语言 如果我更改手机语言 那么我的应用程序将以设置的语言运行 我无法找到任何在不更改手机语言的情况下设置语言的方法 此外 一旦设置了语言 更改就应该反映出来 有人可以建议一
  • 在 Android 上按下电源按钮时,如何防止先调用 onDestroy() 再调用 onCreate()

    我正在记录每个 onCreate 和 onDestroy 调用 我发现 一旦我单击 Android 上的电源按钮 以及模拟器上的电源按钮 我的活动中就会拨打电话 gt onDestroy gt onCreate 这会杀死我的游戏 然后立即从
  • 将 JSON 参数从 java 发布到 sinatra 服务

    我有一个 Android 应用程序发布到我的 sinatra 服务 早些时候 我无法读取 sinatra 服务上的参数 但是 在我将内容类型设置为 x www form urlencoded 之后 我能够看到参数 但不完全是我想要的 我在
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • 在 Android 中,如何将字符串从 Activity 传递到 Service?

    任何人都可以告诉如何将字符串或整数从活动传递到服务 我试图传递一个整数 setpossition 4 但它不需要 启动时总是需要 0 Service 我不知道为什么我不能通过使用 Service 实例从 Activity 进行操作 publ

随机推荐

  • 程序员面试大厂被拆台:干这么多年不懂设计模式谁会要

    正在敲代码的你 春节假期即将来临 复盘这1年 你印象最深刻的一件事是什么 有人在群里回答了一条扎心的答案 忙碌1年 每天996 回首2019除了加班再无成长可说 你以为只要把事情搞定了 成长是一件自然而然的事情 但是过段时间你发现之前犯过的
  • Java生成doc文档一(概念简介)

    在很多项目的实际工作中 后端可能需要将一些整合的数据输出成word pdf excel等形式的文档 最近我在项目也遇到这样的而需求 这里就记录下来是如何一步一步完成java后端生成doc文档的 由于现在word文档基本都是用到07以上 所以
  • 协程中的流

    协程中的异步流 基础 一 什么是异步流 可以连续返回多个值 与集合的区别 集合可以返回多个计算好的值 但是只能一次性返回 与Rxjava 的流是同一个概念 二 如何创建异步流 1 最基础的流构建器 flow flow 构建块中的代码可以挂起
  • Windows上发生异常时抓取dump

    文章目录 正文 RaiseException函数 捕获大部分崩溃 SetUnhandledExceptionFilter 那还有小部分呢 为什么调试器可以抓到所有崩溃 CRT C STL 系统API之间的关系 CRT中几个重要的函数 退出进
  • 学长告诉我,大厂MySQL都是通过SSH连接的

    大家好 我是咔咔 不期速成 日拱一卒 一 背景 之前待的几个公司 数据库 服务器权限都是给所有后端直接拉满的 但也会出现员工离职的情况 每次有人离职时都需要改数据库密码 服务器密码 每次密码修改后得告知所有开发修改本地密码 但这样的事情也不
  • 详解反调试技术

    反调试技术 恶意代码用它识别是否被调试 或者让调试器失效 恶意代码编写者意识到分析人员经常使用调试器来观察恶意代码的操作 因此他们使用反调试技术尽可能地延长恶意代码的分析时间 为了阻止调试器的分析 当恶意代码意识到自己被调试时 它们可能改变
  • xilinx mipi ip

    占位
  • JSP页面中Input输入框获取当前系统时间

    JSP页面中Input输入框获取当前系统时间 在input属性value中填写如下代码即可获取系统当前时间输入 value
  • switch游戏机小白初体验

    1 switch版本区别 lite 续航版与oled的区别 oled屏幕比续航版的大 续航版和oled版都可以连接电视或显示器 lite只能玩掌机 只喜欢玩掌机的可以选lite 更便宜 国行 港版 日版的区别 国行不能与全球玩家联机 不能买
  • warning: could not find UI helper ‘git-credential-manager-ui‘

    可以先试试别人的教程 58条消息 关于git 凭证存储 credential helper配置 解决 git pull push fetch remote not found的问题 DavidFFFFFF的博客 CSDN博客 我是因为换了电
  • Python pyinstaller打包exe最完整教程

    目录 1 简介 2 安装 3 原理和打包效果 3 1 原理概述 3 2 搜索模块 3 3 打包效果概述 3 4 打包成单个文件夹 优点 缺点 3 5 打包成单个exe 优点 缺点 4 打包 4 1 基本语法 4 2 参数总览 位置参数 可选
  • IDEA导入eclipse项目并部署运行完整步骤(转发)

    首先说明一下 idea里的project相当于eclipse里的workspace 而idea里的modules相当于eclipse里的project 1 File gt Import Project 在弹出的对话框里选择要导入的项目 2
  • IAR仿真确认延时程序时间的准确性

    单片机 程序经常会用到延时函数 毫秒延时或微秒延时函数 为了确认延时函数时间的准确性 以前经常是需要通过IO口输出波形来确认时间是否准确 最近发现了个更方便准确的方法 只需要通过IAR仿真软件即可准确知道延时函数的运行时间 1 首先在IAR
  • SQL 数据更新

    SQL 数据更新 数据更新有三种 插入 修改 删除 一 插入数据 插入元组 行 INSERT Into lt 表名 gt lt 属性列1 gt lt 属性列2 gt lt 属性列3 gt lt 属性列4 gt Values lt 常量1 g
  • 2022.7台式机装机指南(3060 + 12490F)

    文章目录 硬件购买 装机避坑 系统制作 系统激活 大学四年用的华硕飞行堡垒FX86 那时候的配置还可以 8代i7 1050ti 8G 256固态 1T机械 后来又买了一张内存条 扩到了16g 四年只出过2次故障 第一次蓝屏自己修好了 第二次
  • PDF Redactor - 涂黑屏蔽PDF文字让敏感内容不可读的软件工具

    PDF Redactor是一款Windows平台下的PDF小工具软件 旨在涂黑屏蔽或删除PDF文件中的敏感文本和图像以保护隐私 被屏蔽的内容不仅在PDF阅读器中无法查看 而且即使使用文本搜索功能也无法再找到这部分内容 这些内容将从PDF文件
  • python json.dumps中文乱码问题解决

    json dumps var ensure ascii False 并不能解决中文乱码的问题 json dumps在不同版本的Python下会有不同的表现 注意下面提到的中文乱码问题在Python3版本中不存在 注 下面的代码再python
  • 解决pyside6-uic生成py代码中文为unicode(乱码)的问题

    前言 本来想用Java做客户端 后来发现很多算法还是Python有现成的比较方便 所以最终选择了pyside6 但是用Designer QT设计师 设计完后 生成的代码中文部分显示为unicode 也可以理解为乱码 就像这样 self pu
  • 前端分页插件_免费开源的React前端框架——ReactAdmin

    介绍 ReactAdmin是一个Github上免费开源的前端框架 不是组件库 也不是模板 它是一个框架 采用es6 React和Material Design构建基于Rest GraphQl API的Web应用程序 在React上star数
  • Android实现用户登录和注册界面

    我们在做android项目时经常会用到用户登录 这里呈上实现了Spinner的登录界面 初学的朋友可以直接拿过来使用 本界面使用的是流式布局 也是我最喜欢用的布局方式 同学们可以通过代码了解一下 代码中Intent的使用有点杂乱 主要是为了