技术标签: java android androidStudent项目学习
目前大多数市场的APP都会存在一个登录界面设计,一个好的登录界面如果功能强大,是很吸引用户的,也极大的给用户带来舒适的体验,那么一个好的登录界面除了界面的美观、还应该具有操作简单、能够记住密码等,本次博客,我们将会给大家讲解如何让登录界面记住密码!
这里学长采用的登录界面的设计是在线性布局的基础上结合框架布局形成的一个现代化风格的界面,首先我们来看下设计的效果图!
可以看到,以上具有的功能包括记住密码、自动登录、忘记密码的处理方法、以及注册账号,但学长目前完成的只有记住密码模块,其他的以后再慢慢进行讲解!
1、界面设计的xml代码如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
android:background="@drawable/back6"
android:id="@+id/back3"
tools:context=".MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="235dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/back"
android:src="@drawable/pto4" />
<ImageView
android:layout_width="130dp"
android:layout_height="130dp"
android:id="@+id/pto"
android:layout_marginTop="70dp"
android:layout_marginLeft="5dp"
android:src="@drawable/pto"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/userName"
android:layout_marginTop="70dp"
android:hint="@string/user"
android:layout_marginLeft="5dp"
android:inputType="text"
android:layout_toRightOf="@id/pto"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/password"
android:hint="@string/passward"
android:inputType="textPassword"
android:layout_marginTop="120dp"
android:layout_marginLeft="5dp"
android:layout_toRightOf="@id/pto"/>
<CheckBox
android:layout_width="90dp"
android:layout_height="wrap_content"
android:id="@+id/remember"
android:layout_toRightOf="@id/pto"
android:layout_marginLeft="5dp"
android:text="记住密码"
android:layout_below="@+id/password"/>
<CheckBox
android:layout_width="90dp"
android:layout_height="wrap_content"
android:layout_below="@+id/password"
android:id="@+id/right1"
android:layout_toRightOf="@+id/remember"
android:text="自动登录"
/>
</RelativeLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"
android:id="@+id/login"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textColor="#FF4081"
android:text="忘记密码?"/>
<TextView
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="wrap_content"
android:textColor="#FF4081"
android:gravity="right"
android:text="注册账号"/>
</LinearLayout>
</LinearLayout>
以上为界面设计的整体代码,大家可以结合参考一下,这里不进行xml代码内容的讲解,相信大家也能够理解啦!
完成记住账号和密码的功能首先我们得知道账号和密码如果需要保存,那我们得有一个存储空间,android给我们提供了一个保存key-value键值对存储数据的方式:利用SharedPreferences存储数据
1、利用SharedPreferences存储账号和密码
SharedPreferences的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息,用Sqlite数据库来存放并不划算,因为数据库连接跟操作等耗时大大影响了程序的效率。其存储位置在/data/data/<包名>/shared_prefs目录下。
另外SharedPreferences只能保存简单类型的数据,例如,String、int等。一般会将复杂类型的数据转换成Base64编码,然后将转换后的数据以字符串的形式保存在 XML文件中,再用SharedPreferences保存。
这类配置信息是以“键值对”的形式存在的。比如配置语言信息
{“language”,“中文”}
接下来,让我们结合代码进行实例讲解:
第一步:我们声明一个SharedPreferences对象:
private SharedPreferences loginPreference;
第二步:然后在activity的创建方法中,实例化:
loginPreference = getSharedPreferences("login", MODE_PRIVATE);
第三步:使用SharedPreferences接口的edit获得SharedPreferences.Editor对象。并通过对象实现键值的输入,并提交:
SharedPreferences.Editor editor = loginPreference.edit();
第四步:读出配置:
editor.putBoolean("checked", remember.isChecked());
if (checked) {
editor.putString("userName", userName1.getText().toString());
editor.putString("password", password1.getText().toString());
} else {
editor.remove("userName").remove("password");
}
editor.commit();
分解开来就是以上四步,现在我们进行整体的讲解;
2、完成以上界面的账号和密码保存:
1、我们声明一个SharedPreferences对象和checkBoxs控件对象已经账号和密码:
private SharedPreferences loginPreference;
private EditText userName1;
private EditText password1;
private CheckBox remember;
private Button login;
2、将以上的对象进行实例化操作:
userName1 = (EditText) findViewById(R.id.userName);
password1 = (EditText) findViewById(R.id.password);
remember = (CheckBox) findViewById(R.id.remember);
login = (Button) findViewById(R.id.login);
loginPreference = getSharedPreferences("login", MODE_PRIVATE);
///要通过loginPreference去记录三个参数(checked,userName,password)
boolean cheched = loginPreference.getBoolean("checked", false);
if (cheched) {
Map<String, Object> m = readLogin();
if (m != null) {
userName1.setText((CharSequence) m.get("userName"));
password1.setText((CharSequence) m.get("password"));
remember.setChecked(cheched);
}
}
3、登录的事件绑定:
login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
configLoginInfo(remember.isChecked());
login();
}
});
4、密码保存函数的代码编写:
public void configLoginInfo(boolean checked) {
SharedPreferences.Editor editor = loginPreference.edit();
editor.putBoolean("checked", remember.isChecked());
if (checked) {
editor.putString("userName", userName1.getText().toString());
editor.putString("password", password1.getText().toString());
} else {
editor.remove("userName").remove("password");
}
editor.commit();
}
5、再次进入时进行账号和密码的读取:
/**
* 读登录信息
*
* @return
*/
public Map<String, Object> readLogin() {
Map<String, Object> m = new HashMap<>();
String userName = loginPreference.getString("userName", "");
String password = loginPreference.getString("password", "");
m.put("userName", userName);
m.put("password", password);
return m;
}
到这里,我们就可以实现以上界面设计的账号和密码的保存了!
以上,就是本次博客的全部内容啦,感谢大家收看,记得点赞评论哦!
文章浏览阅读334次,点赞5次,收藏5次。父组件可以在引用子组件的时候,通过 属性绑定(v-bind)的形式,把 需要传递给子组件的数据,以属性绑定的形式绑定到子组件内部, 供子组件使用。
文章浏览阅读1.2w次,点赞3次,收藏30次。ROS提供了非常强大的图形化模拟环境 RViz,这个 RViz 能做的事情非常多。今天我们学习一下如何使用 RViz 对机器人在路径探索过程中对地图动态观测。我们将学习重放已经采集的数据来模拟机器人输入,从而将精力放到SLAM和地图的建立以及RViz的使用上。下面是效果图:一 基本概念ROS 对机器人导航提供了非常强大的支持,这可以让我们在不了解细节和海量复杂无比的..._topic /map
文章浏览阅读8.5k次,点赞7次,收藏7次。OpenCV的安装: 这一部分当时安装的时候没有记录所以直接参考: http://www.linuxidc.com/Linux/2016-07/132879.htm OpenCV在Ubuntu下的安装,安装opencv之前先要安装一些软件:sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-_ubuntu opencv安装“test_basic.cpp:241:17: error: ‘debuglevel’ is not a mem
文章浏览阅读147次。自动化测试概述—自动化测试脚本编写方法二课程介绍第一章-自动化测试概述:从本章开始,我们开始学习几个主流高级测试工具。我们会将课程分为自动化测试工具、性能测试工具、测试管理工具、接口测试工具等。这些课程属于软件测试技术中难度较大的内容,建议同学们在学习之前先将此前四个阶段的课程内容进行系统有效的复习,以提高学习有效性。第二章-UFT(QTP)入门:从本章开始,老王将向给位同学介绍HPUFT。UFT..._写测试脚本学啥
文章浏览阅读636次。Linux系统rescue模式下修复内核和grub故障现象处理思路,内核报错,因此重新安装内核,通过光盘启动,进入救援模式。1.进入救援模式(1)华为服务器没有光驱,通过mgmt管理口登录,挂载iso镜像来引导。连接服务器mgmt口至数据中心网络,浏览器登录,默认IP地址192.168.2.100,默认账号root,默认密码Huawei12#$。登录如下图单击远程控制链接,进入远程控制管理页面,选..._华为mgmt口默认登录密码
文章浏览阅读258次。文件名称: DTMF下载 收藏√ [5 4 3 2 1]开发工具: Java文件大小: 210 KB上传时间: 2013-07-18下载次数: 69提 供 者: 高高高详细说明:在安卓手机通话过程中,通过检测音频,判断用户按了哪些键,这个在语音网关处理中非常有用,完全不用硬件!这个是源代码。-In Andrews phone call, by detecting the audio..._android 接电话时 接收对方dtmf的按键
文章浏览阅读170次。Adaboost集成学习 | Matlab实现基于RF-Adaboost随机森林结合Adaboost集成学习时间序列预测
文章浏览阅读926次,点赞3次,收藏3次。一、inode和block(前面博客常用命令里软硬链接中也有)文件是存储在硬盘上的,硬盘的最小存储单位叫做"扇区" (sector) ,每个扇区存储512字节。一般连续八个扇区组成一个"块" (block) ,一个块是4K大小,是文件存取的最小单位。操作系统读取硬盘的时候,是一次性连续读取多个扇区,即一个块一个块的读取的。文件数据包括实际数据与元信息(类似文件属性)。文件数据存储在“块"中,存储文件元信息(比如文件的创建者、创建日期、文件大小、文件权限等)的区域就叫做inode(索引节点)。因此,一个_乌班图的ext3和xfs
文章浏览阅读189次。3 月 1 日,由联想、DaoCloud、新华三、华为等 12 家 IT 企业在北京正式达成协议,联合发起成立 “双态运维联盟”。中国电子工业标准技术协会、信息技术服务分会数据中心运营管理工作组(DCMG)组长肖建一先生出席了会议。12 家 IT 企业达成协议 云计算、大数据和物联网的变革时代,企业同时面临着数字化和 “互联网+” 转型..._陈齐彦构建企业双态it能力
文章浏览阅读615次,点赞16次,收藏20次。教务管理工作是是高等教育中的一个极为重要的环节,是整个院校管理的核心和基础。随着信息技术的飞速发展,高等教育对教务管理工作提出了更高的要求。利用先进的技术手段对提高学校教育、培养、管理水平,提高人才的综合素质,打造高品质大学具有广泛深远的意义。
文章浏览阅读3.6k次。对Windows好感又降低一个等级 [HKEY_CURRENT_USER\Software\SEGGER\J-Link] the string ‘InstallPath’ has the right path to the Jlink installation folder. 安装新版之后这个注册表里的安装路径没有更新,需要手动更改一下,真是日了狗了,不知道这锅改Windows背还是SEGGE_jlink 6.20没有.dll文件
文章浏览阅读844次。excelPanel:一个二维RecyclerView,它可以加载历史数据。(https://www.ctolib.com/excelPanel.html)地址:https://github.com/zhouchaoyuan/excelPanel_excelpanel