学习Android已经有一个多月了,老师留了实现qq登陆注册和好友列表的作业,要求:

  1. 设计登录界面,注册界面和好友列表界面。
  2. 在登录界面输入用户名“admin”,密码“abc123”后,判断用户名和密码是否正确。
  1. 若用户名或密码错误则给出相应提示:“用户名或密码输入有误!”;
  2. 若用户名或密码为空则给出提示:“用户名或密码不能为空!”;
  3. 若用户名和密码正确,点击登录按钮,进入“好友列表界面”。
  1. 点击“注册”进入到注册界面,如图“注册界面效果图”所示,注册信息填写完成后点击“注册”按钮,用Toast提示注册信息。
  2. 要求每个界面中的必要控件不能缺少,在此基础上,可以添加美化效果,完善输入格式校验。

我比较菜,经过断断续续的敲打终于完成了,下面是详细过程。

首先是效果图

完成作业的思路大概是先完成每个也页面的设计,在通过登录界面将三个页面连接,可以先建立需要的activity。除了开始的mainactivity我建立了register用于注册界面,friendlist用于好友列表界面

首先是登录页面的设计具体代码如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><ImageViewandroid:layout_width="match_parent"android:layout_height="100dp"android:layout_marginTop="80dp"android:src="@drawable/head2"></ImageView><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="15dp"><TextViewstyle="@style/tvTwo"android:layout_width="62dp"android:text="姓名" /><EditTextandroid:id="@+id/etName"android:layout_width="341dp"android:layout_height="78dp"></EditText></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="86dp"android:orientation="horizontal"android:padding="15dp"><TextViewstyle="@style/tvTwo"android:layout_width="64dp"android:layout_height="33dp"android:text="密码" /><EditTextandroid:id="@+id/etPwd"android:layout_width="378dp"android:layout_height="70dp"></EditText></LinearLayout><Buttonandroid:id="@+id/bt_enter"android:layout_width="match_parent"android:layout_height="50dp"android:layout_alignParentBottom="true"android:background="@null"android:gravity="center"android:text="登录"android:textColor="@android:color/black"android:textSize="18sp"></Button><Buttonandroid:id="@+id/bt_submit"android:layout_width="match_parent"android:layout_height="50dp"android:layout_alignParentBottom="true"android:background="@null"android:gravity="right"android:text="没有账号?点击注册"android:textColor="@android:color/black"android:textSize="18sp"></Button></LinearLayout>
</RelativeLayout>

为了实现跳转,核对姓名密码等要求,Java代码设计如下

package com.example.firstwork1;import androidx.appcompat.app.AppCompatActivity;import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;public class MainActivity extends AppCompatActivity implements View.OnClickListener {private EditText etName, etPwd;private Button bt_enter,bt_submit;private String Name, Pwd;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);init();}private void init() {etName = findViewById(R.id.etName);etPwd = findViewById(R.id.etPwd);bt_enter= findViewById(R.id.bt_enter);bt_submit = findViewById(R.id.bt_submit);bt_enter.setOnClickListener(this);bt_submit.setOnClickListener(this);}private void getData() {Name = etName.getText().toString().trim();Pwd = etPwd.getText().toString().trim();}@Overridepublic void onClick(View v) {String username="admin";String userpassword="abc123";switch (v.getId()) {case R.id.bt_enter:getData();if (TextUtils.isEmpty(Name)) {Toast.makeText(MainActivity.this, "请输入名字",Toast.LENGTH_SHORT).show();} else if (TextUtils.isEmpty(Pwd)) {Toast.makeText(MainActivity.this, "请输入密码",Toast.LENGTH_SHORT).show();} else if (etName.getText().toString().trim().equals(username)){if (etPwd.getText().toString().trim().equals(userpassword)){Intent intent = new Intent(MainActivity.this, friendlist.class);startActivity(intent);}else {Toast.makeText(MainActivity.this,"密码有误,请重新输入",Toast.LENGTH_SHORT).show();}} else {Toast.makeText(MainActivity.this,"用户名有误,请重新输入",Toast.LENGTH_SHORT).show();}break;case R.id.bt_submit:Intent intent = new Intent(MainActivity.this, register.class);startActivity(intent);}}
}

首先对需要的变量进行定义封装,接着获取界面控件,设置事件监听器。

getData函数用于获取输入的信息

接着是对两个按钮功能的编写,

为了实现用户名和密码的比对,这里定义了两个str类型的变量,作为用户名和密码

switch语句中的两个case分别对应登录和注册按钮的点击事件

第一个,首先获取数据,接着判断所获的数据是否为空,如为空,则给出相对应的提示,如果不是,则和事先录入的用户名和密码进行对比,注意,这里的数据类型都是str类型,不能用简单的||或者&&和!=来进行比对,我这里采用equals来对比两个值,相同结果为1 ,则通过反之则退回,全部通过后,就可以通过intent进行页面的跳转

第二个则直接跳转

此时运行程序点击按钮就可以进行跳转了,但是跳转后页面为空,下面设计注册和好友列表界面

好友列表界面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="@drawable/bg2"><TextViewandroid:layout_width="match_parent"android:layout_height="45dp"android:text="好友列表"android:textColor="#FFFFFF"android:background="#FF8F03"android:gravity="center"></TextView><ListViewandroid:id="@+id/lv"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_marginTop="30dp"></ListView></RelativeLayout>

欸,好短,因为在这里使用的是ListView控件,布局代码如下

<?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="16dp"><ImageViewandroid:id="@+id/iv"android:layout_width="120dp"android:layout_height="90dp"android:layout_centerVertical="true"></ImageView><RelativeLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="10dp"android:layout_centerVertical="true"android:layout_toRightOf="@+id/iv"android:orientation="horizontal"><TextViewandroid:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="芭芭拉"android:textColor="#FF8F03"android:textSize="20dp"></TextView><TextViewandroid:id="@+id/introduce"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_below="@+id/name"android:layout_marginTop="10dp"android:ellipsize="end"android:maxLines="2"android:text="芭芭拉闪亮登场"android:textColor="#FF716C6D"android:textSize="16dp"></TextView></RelativeLayout>

适配器的代码如下

package com.example.firstwork1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;public class friendlist extends AppCompatActivity {private ListView mListView;private String[] names = {"芭芭拉","琴","刻晴","胡桃","香菱","影","可莉"};private String[] introduces = {"芭芭拉闪亮登场","以剑为誓","剑光如我,斩尽芜杂","吃好喝好,一路走好","救命啊,食材打人了","我要把你砌进神像里","蹦蹦炸弹"};private int[] icons = {R.drawable.babala,R.drawable.qin,R.drawable.keqing,R.drawable.hutao,R.drawable.xianglin,R.drawable.ying,R.drawable.keli};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_friendlist);mListView = findViewById(R.id.lv);MyBaseAdapter mAdapter = new MyBaseAdapter();mListView.setAdapter(mAdapter);}class MyBaseAdapter extends BaseAdapter {@Overridepublic int getCount(){return names.length;}@Overridepublic Object getItem(int position){return names[position];}@Overridepublic long getItemId(int position){return  position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent){View view = View.inflate(friendlist.this,R.layout.list_friend,null);TextView name = view.findViewById(R.id.name);TextView introduce = view.findViewById(R.id.introduce);ImageView iv = view.findViewById(R.id.iv);name.setText(names[position]);introduce.setText(introduces[position]);iv.setBackgroundResource(icons[position]);return view;}}}

适配器定义了三个数组,name introduce和icons,这三个数组用于存储姓名,介绍和图片

通过setAdapter方法为ListView的数据适配器,通过创建一个继承自BaseAdapter的MyBaseAdapter的类。重写父类中的方法,其中inflate方法加载列表条目的布局文件,通过findViewByid方法获取列表条目上的控件,最后通过setText()与setBackground方法设置文本和图片信息。

需要注意的是,当ListView控件上的item过多并快速会出现卡顿,需要优化,但这里数据较小,没有进行优化

最后是注册界面

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/bg3"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="50dp"android:background="@android:color/white"android:gravity="center"android:text="身份注册"android:textColor="#000"android:textSize="25sp"android:textStyle="italic" /><LinearLayoutandroid:layout_width="411dp"android:layout_height="wrap_content"android:orientation="horizontal"android:gravity="center"></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="15dp"><TextViewstyle="@style/tvTwo"android:layout_width="62dp"android:text="姓名" /><EditTextandroid:id="@+id/et_name"style="@style/etOne" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="15dp" ><TextViewstyle="@style/tvTwo"android:layout_width="82dp"android:layout_height="33dp"android:text="密码" /><EditTextandroid:id="@+id/et_pwd"style="@style/etOne"android:layout_width="263dp"android:layout_height="35dp"android:inputType="textPassword" /></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="15dp"><TextViewstyle="@style/tvTwo"android:layout_width="wrap_content"android:layout_height="44dp"android:text="性别" /><RadioButtonandroid:id="@+id/rb_boy"android:layout_width="87dp"android:layout_height="56dp"android:text="男"android:textColor="@android:color/black"android:textSize="15sp"></RadioButton><RadioGroupandroid:id="@+id/rg_sex"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginLeft="50dp"android:orientation="horizontal"></RadioGroup><RadioButtonandroid:id="@+id/rb_girl"style="@style/tvTwo"android:layout_width="98dp"android:layout_height="61dp"android:text="女"></RadioButton></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal"android:padding="15dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="爱好"android:textColor="@android:color/black"></TextView><CheckBoxandroid:id="@+id/cb_sing"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="15dp"android:text="唱歌"android:textColor="@android:color/black">></CheckBox><CheckBoxandroid:id="@+id/cb_dance"android:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="15dp"android:text="跳舞"android:textColor="@android:color/black">></CheckBox><CheckBoxandroid:id="@+id/cb_rap"android:layout_width="93dp"android:layout_height="wrap_content"android:padding="15dp"android:text="rap"android:textColor="@android:color/black">></CheckBox><CheckBoxandroid:id="@+id/cb_ball"android:layout_width="93dp"android:layout_height="wrap_content"android:padding="15dp"android:text="篮球"android:textColor="@android:color/black">></CheckBox></LinearLayout><LinearLayoutandroid:layout_width="411dp"android:layout_height="wrap_content"android:orientation="horizontal"android:gravity="center"><Buttonandroid:id="@+id/btn_submit"android:layout_width="match_parent"android:layout_height="50dp"android:layout_alignParentBottom="true"android:background="@null"android:gravity="center"android:text="注册"android:textColor="@android:color/black"android:textSize="18sp"></Button></LinearLayout></LinearLayout>
</RelativeLayout>

这里比较简单,只需要对其中的各种控件进行设置就可以了,和登录界面大同小异,(我也是复制改的)

package com.example.firstwork1;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.RadioGroup;
import android.widget.Toast;public class register extends AppCompatActivity implements
View.OnClickListener,CompoundButton.OnCheckedChangeListener{private EditText et_name,et_pwd;private Button btn_submit,btn_enter;private String name,pwd,sex,hobbys;private RadioGroup rg_sex;private CheckBox cb_sing,cb_dance,cb_rap,cb_ball;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_register);init();}private void init(){et_name = findViewById(R.id.et_name);et_pwd = findViewById(R.id.et_pwd);rg_sex = findViewById(R.id.rg_sex);cb_sing = findViewById(R.id.cb_sing);cb_dance = findViewById(R.id.cb_dance);cb_rap = findViewById(R.id.cb_rap);cb_ball = findViewById(R.id.cb_ball);btn_submit = findViewById(R.id.btn_submit);btn_submit.setOnClickListener(this);cb_sing.setOnCheckedChangeListener(this);cb_dance.setOnCheckedChangeListener(this);cb_rap.setOnCheckedChangeListener(this);cb_ball.setOnCheckedChangeListener(this);hobbys = new String();rg_sex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {switch (checkedId){case R.id.rb_boy:sex = "男";break;case  R.id.rb_girl:sex = "女";break;}}});}private void getData(){name = et_name.getText().toString().trim();pwd = et_pwd.getText().toString().trim();}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.btn_submit:getData();if (TextUtils.isEmpty(name)) {Toast.makeText(register.this, "请输入名字",Toast.LENGTH_SHORT).show();} else if (TextUtils.isEmpty(pwd)) {Toast.makeText(register.this, "请输入密码",Toast.LENGTH_SHORT).show();} else if (TextUtils.isEmpty(name)) {Toast.makeText(register.this, "请选择性别",Toast.LENGTH_SHORT).show();} else if (TextUtils.isEmpty(name)) {Toast.makeText(register.this, "请选择兴趣爱好",Toast.LENGTH_SHORT).show();}else {Toast.makeText(register.this,"注册成功",Toast.LENGTH_SHORT).show();Log.i("MainActivity","注册的用户信息:"+"名字"+name+"性别"+sex+"爱好"+hobbys);}break;}}public void onCheckedChanged(CompoundButton buttonView,boolean isChecked){String motion = buttonView.getText().toString();if (isChecked){if (!hobbys.contains(motion)){hobbys = hobbys + motion;}}else {if (hobbys.contains(motion)){hobbys = hobbys.replace(motion,"");}}}
}

此外,对于界面上的一些设置,我把一部分放在了style文件里面

<resources><!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"><!-- Customize your theme here. --><item name="colorPrimary">@color/colorPrimary</item><item name="colorPrimaryDark">@color/colorPrimaryDark</item><item name="colorAccent">@color/colorAccent</item></style><style name="etOne"><item name="android:layout_width">match_parent</item><item name="android:layout_height">wrap_content</item><item name="android:layout_marginLeft">30dp</item><item name="android:background">@null</item><item name="android:textColor">@android:color/black</item></style><style name="tvOne"><item name="android:layout_width">0dp</item><item name="android:layout_height">match_parent</item><item name="android:layout_weight">1</item><item name="android:drawablePadding">8dp</item><item name="android:gravity">center_horizontal</item><item name="android:paddingTop">40dp</item><item name="android:textColor">@android:color/black</item><item name="android:textSize">15dp</item></style><style name="tvTwo"><item name="android:layout_width">wrap_content</item><item name="android:layout_height">wrap_content</item><item name="android:layout_marginLeft">20px</item><item name="android:textColor">@android:color/black</item><item name="android:textSize">15dp</item></style></resources>

以上就是全部的内容了,大家下次作业再见

Android实现qq登录注册和好友列表界面相关推荐

  1. Android仿QQ登录下拉历史列表

    最近项目开发中做到注册登录时,产品要求登录历史列表类似于QQ登录,经过一番的思考着手开始撸代码,下面是两张效果图.下载完整demo地址:https://download.csdn.net/downlo ...

  2. Android之QQ登录

    Android之QQ登录 1.下载Android SDK :QQ登录.支付.社交渠道等功能 SDK类型 最近更新日期 文件大小 说明 Android_SDK_V3.1.0  2016-05-24 4. ...

  3. java读取qq邮箱_java获取qq邮箱中的好友列表

    评论 # re: java获取qq邮箱中的好友列表 2009-05-07 20:56 咖啡@可乐 # re: java获取qq邮箱中的好友列表 2009-05-08 09:07 EverestSnow ...

  4. QQ普通会员免费克隆好友列表(转)

    QQ普通会员免费克隆好友列表(转) 相信大家手头都有几个备用的QQ号吧,有时候因为某些原因,突然要把一个QQ上的好友完全克隆到另外一个QQ上面,这个"庞大工程"我想一般人是没有时间 ...

  5. 爬虫(三)生成qq好友关系网(1)—登录并获得好友列表

    本文目标 1.使用selenium实现账号密码登录qq空间 2.使用多线程爬取qq好友的说说评论点赞情况保存至本地 3.使用echarts将数据可视化 开源地址:qq好友关系爬虫 这是帮我同学做的他的 ...

  6. android里qq登录界面,Android仿QQ登陆窗口实现原理

    今天根据腾讯qq,我们做一个练习,来学习如何制作一个漂亮的布局.首先看一下官方图片 还是一个启动画面,之后进入登录页面,导航页面就不介绍了,大家可以参考微信的导航页面.首先程序进入SplashActi ...

  7. 视频聊天app源码Android实现QQ登录功能

    在AndroidManifest.xml的application标签中添加一下两个activity. <uses-permission android:name="android.pe ...

  8. Android 简易QQ登录页面

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  9. Android集成QQ登录

    转载请声明出处:http://blog.csdn.net/green_pepper/article/details/70001867 小菜鸟一只,每篇博客都是一页学习笔记,希望自己能一直写下去,自己的 ...

最新文章

  1. python自然语言处理课后答案
  2. Python数据库访问公共组件及模拟Http请求
  3. linux apt-get 安装 根目录,技术|apt-get 和 apt-cache 命令实例展示
  4. 《CLR via C#》 第三版的主要内容
  5. 【吼吼睡cocos2d学习笔记】第四章 - 第一个游戏
  6. linux 针对目录空间配额,linux磁盘配额quota
  7. workbench透明设置_ansys workbench模型能透明显示吗?非常感谢
  8. Google Webmaster Tools 结构化数据标记使用入门指南
  9. linux用pe大小做逻辑卷,Linux常用命令之--逻辑卷
  10. 日益努力而后风生水起,送3本技术好书
  11. 详解 TCP 连接的“ 三次握手 ”与“ 四次挥手 ”
  12. notePad++安装及json,xml格式化插件安装
  13. APACHE ACTIVEMQ安装
  14. 元数据(MetaData)
  15. word文档里怎么撤回上一步的操作
  16. 学计算机去北理还是去哈工大,我是哈工大威海大三软件学院的学生,我想考北理工..._在职考研_帮考网...
  17. 想杀死某个端口进程,但在服务列表中却找不到,可以之间通过命令行找到这个进程并杀死该进程,减少重启电脑和找到问题根源。
  18. 一些有趣但少有人知的 Python 特性
  19. hql删除mysql语句_hibernate -- HQL语句总结
  20. 让Oracle高效并行执行的13个必备知识点

热门文章

  1. 校园转转二手市场源码
  2. 计算机视觉和图像的区别与联系
  3. CentOS 安装 rar、zip 解压缩
  4. 安川服务器显示fn001,安川伺服辅助功能参数一览表
  5. 那些爆火的小游戏你都玩过吗?
  6. Thinkpad T460p 扩容重装学习----BIOS设置硬盘启动
  7. 在MAC中怎么把窗口快速移到另一个显示器
  8. 《30天吃掉那只 TensorFlow2.0》 2-2 三种计算图
  9. 比 Hadoop 快至少 10 倍的物联网大数据平台,我把它开源了
  10. NetCore开发的分布式文件上传系统