1.信息文件存储知识点:Flie输出流和输入流,TextUtil,Map的使用。
2.案例所需的图片:
3.案例文件的目录,如下图:
4.登录页面顶部布局login_top,图片和代码如下:
代码:
<?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="wrap_content"
android:background="@drawable/login_topbg"
android:padding="@dimen/activity_horizontal_margin">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/etName"
android:drawableLeft="@drawable/icon_user"
android:background="@android:drawable/edit_text"
android:hint="请输入账号"
android:drawablePadding="10dp"
/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/etPass"
android:inputType="textPassword"
android:drawableLeft="@drawable/icon_pass"
android:background="@android:drawable/edit_text"
android:hint="请输入密码"
android:layout_below="@+id/etName"
android:drawablePadding="10dp">
<requestFocus/>
</EditText>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/etPass"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<CheckBox
android:id="@+id/checkbox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="记住密码"
android:layout_weight="1"
android:layout_marginLeft="20dp"/>
<Button
android:id="@+id/btn_login"
android:onClick="login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="登录"
android:layout_weight="1"
android:background="@drawable/btn_select"
android:layout_marginRight="20dp"/>
</LinearLayout>
</RelativeLayout>
5.登录顶部背景设置login_topbg.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#55FFFFFF"></solid>
<corners android:radius="10dp"></corners>
</shape>
6.登录按钮选择时的设置btn_select.xml、btn_shape.xml、btn_shape_after.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:andriod="http://schemas.android.com/apk/res/android">
<item andriod:drawable="@drawable/btn_shape" andriod:state_pressed="false"/>
<item andriod:drawable="@drawable/btn_shape_after" andriod:state_pressed="true"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:andriod="http://schemas.android.com/apk/res/android">
<solid andriod:color="#FF72CAE1"/>
<corners andriod:radius="10dp"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:andriod="http://schemas.android.com/apk/res/android">
<solid andriod:color="#87cefa"/>
<corners andriod:radius="10dp"/>
</shape>
7.登录主页面activity_main,图片和代码如下:
代码:
<?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:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="@dimen/activity_horizontal_margin"
tools:context="bzu.edu.cn.login.MainActivity"
android:background="@drawable/loginbg">
<include layout="@layout/login_top"></include>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/deer"
android:id="@+id/imageView"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
8.登录页面背景loginbg.xml,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#FFACDAE5"
android:endColor="#FF72CAE1"
android:angle="45"/>
</shape>
9.java类UserInfo用于对用户信息的操作,代码如下:
package bzu.edu.cn.login;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
/**
* Created by dpl on 2017/4/6 0006.
*/
public class UserInfo{ //用于用户信息的读取和保存
public static Map<String,String> readInfo(){
Map<String,String> map=new HashMap<String,String>();
File file=new File("/data/data/bzu.edu.cn.login/UserInfo.txt");//指定文件存储位置
try {
FileInputStream fis=new FileInputStream(file);//文件输入流
BufferedReader bfr=new BufferedReader(new InputStreamReader(fis));
String content=bfr.readLine();//读取数据
String[] splits=content.split("##");//切割字符串,映射到map集合中
String name=splits[0];
String pwd=splits[1];
map.put("name",name);//将用户名和密码放入map中
map.put("pwd",pwd);
fis.close();
return map;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static boolean saveInfo(String name,String pwd){
String result=name+"##"+pwd;
File file=new File("/data/data/bzu.edu.cn.login/UserInfo.txt");
try {
FileOutputStream fos=new FileOutputStream(file);//输入流
fos.write(result.getBytes());
fos.close();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
10.java主类MainActivity,代码如下:
package bzu.edu.cn.login;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Toast;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private EditText et_name;
private EditText et_pass;
private CheckBox cb_ischeck;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_name=(EditText)findViewById(R.id.etName);
et_pass=(EditText)findViewById(R.id.etPass);
cb_ischeck=(CheckBox)findViewById(R.id.checkbox);
Map<String,String> map=UserInfo.readInfo();
if(map!=null){
String name=map.get("name");//取出用户名和密码
String pwd=map.get("pwd");
et_name.setText(name);//添加到EditText控件上
et_pass.setText(pwd);
}
}
public void login(View view){
String name=et_name.getText().toString().trim();
String pwd=et_pass.getText().toString().trim();
if (TextUtils.isEmpty(name)||TextUtils.isEmpty(pwd)){
Toast.makeText(MainActivity.this,"用户名或密码不能为空!",Toast.LENGTH_LONG).show();
}else {
Toast.makeText(MainActivity.this,"正在登陆",Toast.LENGTH_LONG).show();
}
if(cb_ischeck.isChecked()){
boolean result=UserInfo.saveInfo(name,pwd);
if(result){
Toast.makeText(MainActivity.this,"保存成功",Toast.LENGTH_LONG).show();
}else {
Toast.makeText(MainActivity.this,"保存失败",Toast.LENGTH_LONG).show();
}
}else {
Toast.makeText(MainActivity.this,"是否勾选记住密码?",Toast.LENGTH_LONG).show();
}
}
}