Android登录记住多个密码的实现方法

先给大家说下我实现的思路:

在popouWindow里面加上ListView,数据是把List以字符串按照JSON的样式存入本地,先看看效果

adapter_user_item.xml是listView item中的布局,就一个图片按钮和一个显示按钮

<?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:background="#ffffff"
  android:gravity="center"
  android:minHeight="60dp"
  android:orientation="horizontal" >
  <TextView
    android:id="@+id/adapter_account_item_iphone"
    android:layout_width="0dip"
    android:layout_height="wrap_content"
    android:layout_marginLeft="20dp"
    android:layout_weight="1"
    android:background="@null"
    android:singleLine="true"
    android:textColor="@android:color/black"
    android:textSize="15sp" />
  <ImageView
    android:id="@+id/adapter_account_item_delete"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:paddingRight="20dp"
    android:scaleType="fitXY"
    android:src="@drawable/login_delete_account" />
</LinearLayout> 

login_pop_view.xml只是一个列表按钮

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:dividerHeight="1dp"
android:background="@drawable/dialog_bottom_holo_light" /> 

UserAdapter.java是适配器,用来填充ListView,在里面增加一个接口,用来处理ListView中的删除账户信息功能,这个功能在Activity中实现

package com.weikong.adapter;
 import java.util.ArrayList;
import java.util.List;
import com.weikong.R;
import com.weikong.bean.User;
import com.weikong.views.LoginActivity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.TextureView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
public class UserAdapter extends BaseAdapter{
  private List<User> listUsers = new ArrayList<User>();
  private Context context;
  // private LayoutInflater mLayoutInflater = null;
  private DeleteUser deleteUser;
  public void setDeleteUser(DeleteUser deleteUser) {
    this.deleteUser = deleteUser;
  }
  public UserAdapter(Context context){
    this.context = context;
  }
  public void setListUsers(List<User> listUsers){
    this.listUsers = listUsers;
    this.notifyDataSetChanged();
  }
  @Override
  public int getCount() {
    // TODO Auto-generated method stub
    return listUsers.size();
  }
  @Override
  public User getItem(int position) {
    // TODO Auto-generated method stub
    return listUsers.get(position);
  }
  @Override
  public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
  }
  @Override
  public View getView(int position, View convertView, ViewGroup parent) {
    UserHolder userHolder = null;
    if(convertView == null){
<span style="white-space:pre">     </span>//这里装载也要这样写
      convertView = LayoutInflater.from(parent.getContext())
          .inflate(R.layout.adapter_user_item,parent,false);
      userHolder = new UserHolder(convertView);
<span style="white-space:pre">     </span>//这个很重要哦
      userHolder.ivDelete.setTag(position);
      userHolder.ivDelete.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
          deleteUser.deleteUserClick(v);
        }
      });
      convertView.setTag(userHolder);
    }else{
      userHolder = (UserHolder)convertView.getTag();
    }
    User user = getItem(position);
    Log.e("", user.getId());
    userHolder.tvAccount.setText(user.getId());
    userHolder.ivDelete.setImageResource(R.drawable.login_delete_account);
    return convertView;
  }
  class UserHolder{
    public TextView tvAccount;
    public ImageView ivDelete;
    public UserHolder(View v){
      tvAccount = (TextView)v.findViewById(R.id.adapter_account_item_iphone);
      ivDelete = (ImageView)v.findViewById(R.id.adapter_account_item_delete);
    }
  }
  public interface DeleteUser{
    public void deleteUserClick(View v);
  }
}
activity_login.xml 布局
[html] view plain copy
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:background="@android:color/white"
  android:orientation="vertical"
  android:paddingBottom="10dp" >
  <ImageView
    android:id="@+id/loginicon"
    android:layout_width="120dp"
    android:layout_height="120dp"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp"
    android:contentDescription="@string/app_name"/>
  <LinearLayout
    android:id="@+id/mLayout"
    android:layout_width="300dp"
    android:layout_height="60dp"
    android:layout_below="@+id/loginicon"
    android:layout_centerHorizontal="true"
    android:gravity="center"
    android:layout_marginTop="30dp"
    android:background="@drawable/login_input_bg" >
    <EditText
      android:id="@+id/mobilenum"
      android:layout_width="0dip"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:layout_marginLeft="20dp"
      android:background="@null"
      android:hint="@string/please_input_phone"
      android:maxLength="11"
      android:singleLine="true"
      android:textSize="15sp"
      android:textColor="@android:color/black" />
    <ImageView
      android:id="@+id/login_iv_show_phone_list"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center_vertical"
      android:layout_marginLeft="10dp"
      android:layout_marginRight="10dp"
      android:scaleType="fitXY"
      android:src="@drawable/ic_find_next_holo_light"/>
  </LinearLayout>
  <RelativeLayout
    android:id="@+id/pLayout"
    android:layout_width="300dp"
    android:layout_height="60dp"
    android:layout_below="@+id/mLayout"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="10dp"
    android:background="@drawable/login_input_bg" >
    <EditText
      android:id="@+id/pwd"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      android:layout_centerVertical="true"
      android:layout_marginLeft="20dp"
      android:layout_marginRight="20dp"
      android:background="@null"
      android:hint="@string/please_input_password"
      android:inputType="textPassword"
      android:singleLine="true"
      android:textColor="@android:color/black"/>
  </RelativeLayout>
  <Button
    android:id="@+id/dologin"
    android:layout_width="300dp"
    android:layout_height="60dp"
    android:layout_below="@+id/pLayout"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="30dp"
    android:background="@drawable/loginbtn_selector"
    android:text="@string/login"
    android:textColor="@android:color/white"
    android:textSize="@dimen/text_size_larger" />
  <RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginTop="10dp" >
    <Button
      android:id="@+id/forgetPassword"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentLeft="true"
      android:layout_marginTop="5dp"
      android:background="@null"
      android:text="@string/forget_password"
      android:textColor="@android:color/black"
      android:textSize="@dimen/text_size_larger" />
    <Button
      android:id="@+id/registerbtn"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_alignParentRight="true"
      android:layout_marginTop="5dp"
      android:background="@null"
      android:text="@string/register_new_custom"
      android:textColor="@android:color/black"
      android:textSize="@dimen/text_size_larger" />
  </RelativeLayout>
</RelativeLayout> 

现在就是在Activity中实现了

package com.weikong.views;
import java.util.ArrayList;
import java.util.List;
import com.weikong.R;
import com.weikong.adapter.UserAdapter;
import com.weikong.adapter.UserAdapter.DeleteUser;
import com.weikong.bean.User;
import com.weikong.tools.DateUtil;
import com.weikong.tools.Constants;
import com.weikong.tools.LocalInfoUtil;
import android.annotation.SuppressLint;
import android.app.ActionBar.LayoutParams;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnFocusChangeListener;
import android.view.View.OnTouchListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener;
/**
 *
 * @author dengyancheng
 * @version 1.0 —{2015-07-31} 登陆界面
 *
 */
public class TestActivity extends BaseActivity implements OnTouchListener,
OnItemClickListener,
OnFocusChangeListener,
DeleteUser,
TextWatcher,
OnDismissListener{
  private final static String TAG = LoginActivity.class.getName();
  private Context context;
  /**** 手机号、密码 ***/
  private EditText etPhone, etPassword;
  /**用来显示电话号码列表*/
  private ImageView ivShowPhoneList;
  /**存储电话与密码*/
  private List<User> listUsers = null;
  /**点击ivShowPhoneList图片弹出的会话框*/
  private PopupWindow popupWindow;
  /**在popupWindow中显示账户列表*/
  // Cprivate WrapListView wrapListView;
  private ListView wrapListView;
  /**适配器*/
  private UserAdapter userAdapter;
  protected static final int UPDATE_POPUWINDOW_HEIGHT_DELETE = 1000;
  protected static final int UPDATE_POPUWINDOW_HEIGHT_SHOW = 1001;
  private static final int UPDATE_POPUWINDOW_HEIGHT_DISMISS = 1002;
  @SuppressLint("HandlerLeak")
  private Handler myHandler = new Handler() {
    @Override
    public void handleMessage(android.os.Message msg) {
      switch (msg.what) {
      case UPDATE_POPUWINDOW_HEIGHT_DISMISS:
        ivShowPhoneList.setImageResource(R.drawable.ic_find_next_holo_light);
        break;
      case UPDATE_POPUWINDOW_HEIGHT_DELETE:
          int popuWidthDelete = findViewById(R.id.mLayout).getWidth()+10;
          int popuHeightDelete = ((Integer)msg.obj)<3?LayoutParams.WRAP_CONTENT:findViewById(R.id.mLayout).getHeight()*3;
          popupWindow.setWidth(popuWidthDelete);
          popupWindow.setHeight(popuHeightDelete);
          Log.e(TAG, "isShowing()=" + popupWindow.isShowing());
          if(popupWindow.isShowing()) {
            popupWindow.dismiss();
          }
          popupWindow.showAsDropDown(findViewById(R.id.mLayout), -5, -1);
        break;
      case UPDATE_POPUWINDOW_HEIGHT_SHOW:
          int popuWidthShow = findViewById(R.id.mLayout).getWidth()+10;
          int popuHeightShow = ((Integer)msg.obj)<3?LayoutParams.WRAP_CONTENT:findViewById(R.id.mLayout).getHeight()*3;
          popupWindow.setWidth(popuWidthShow);
          popupWindow.setHeight(popuHeightShow);
          Log.e(TAG, "isShowing()=" + popupWindow.isShowing());
          if(popupWindow.isShowing()) {
            popupWindow.dismiss();
            return;
          }
          ivShowPhoneList.setImageResource(R.drawable.ic_find_previous_holo_light);
          popupWindow.showAsDropDown(findViewById(R.id.mLayout), -5, -1);
          break;
      default:
        break;
      }
    };
  };
  @Override
  protected void onCreate(Bundle arg0) {
    super.onCreate(arg0);
    setContentView(R.layout.activity_test);
    context = this;
    initView();
    addlisener();
  }
  /***
   * 初始化控件
   */
  private void initView() {
    // 获取本机系统语言
    String systemlanguage = getResources().getConfiguration().locale
        .getCountry();
    etPhone = (EditText) findViewById(R.id.mobilenum);
    etPhone.setOnFocusChangeListener(this);
    etPhone.addTextChangedListener(this);
    if (systemlanguage.equals("CN")) {
      etPhone.setInputType(InputType.TYPE_CLASS_NUMBER);
    }
    etPassword = (EditText) findViewById(R.id.pwd);
    etPassword.setOnFocusChangeListener(this);
    ivShowPhoneList = (ImageView)findViewById(R.id.login_iv_show_phone_list);
    ivShowPhoneList.setOnClickListener(this);
    wrapListView = (ListView) LayoutInflater.from(context).inflate(R.layout.login_pop_view, null);
    wrapListView.setOnItemClickListener(this);
    userAdapter = new UserAdapter(this);
    userAdapter.setDeleteUser(this);
    wrapListView.setAdapter(userAdapter);
    popupWindow = new PopupWindow(wrapListView);
    popupWindow.setBackgroundDrawable(getResources().getDrawable(R.color.transparent));
    popupWindow.setFocusable(true);
    popupWindow.setOutsideTouchable(true);
    popupWindow.setOnDismissListener(this);
  }
  /***
   * 添加监听事件
   */
  private void addlisener() {
    findViewById(R.id.dologin).setOnClickListener(this);
    findViewById(R.id.forgetPassword).setOnClickListener(this);
    findViewById(R.id.registerbtn).setOnClickListener(this);
    etPhone.setOnTouchListener(this);
    etPassword.setOnTouchListener(this);
  }
  @Override
  public void onClick(View v) {
    super.onClick(v);
    switch (v.getId()) {
    //点击图片显示存储登录过的账户列表
    case R.id.login_iv_show_phone_list:
      //获取存储在本地的用户登录数据
      listUsers = LocalInfoUtil.getUser(context);
      if(listUsers != null && listUsers.size() > 0){
        userAdapter.setListUsers(listUsers);
        Message message = new Message();
        message.obj = listUsers.size();
        message.what = UPDATE_POPUWINDOW_HEIGHT_SHOW;
        myHandler.sendMessage(message);
      }
      break;
    case R.id.dologin:
      //把登录User信息进行存储
      User user = new User();
      user.setId(etPhone.getEditableText().toString());
      user.setPwd(etPassword.getEditableText().toString());
      user.setLoginStatus(1);
      user.setLoginTime(DateUtil.getCurrentNowTime());
      if(listUsers == null){
        listUsers = new ArrayList<User>();
      }
      listUsers.add(user);
      LocalInfoUtil.saveUser(context,listUsers);
      break;
    default:
      break;
    }
  }
  @Override
  public boolean onTouch(View v, MotionEvent event) {
    Drawable drawable = null;
    //判断是否是电话删除
    if(v.getId() == R.id.mobilenum){
      drawable = etPhone.getCompoundDrawables()[2];
      //判断有没有图片
      if(drawable == null)return false;
      //判断是不是按下事件
      if(event.getAction() != MotionEvent.ACTION_UP)return false;
      //进行判断在right图片点击范围
      if (event.getX() > etPhone.getWidth()- etPhone.getPaddingRight()
          - drawable.getIntrinsicWidth()){
        etPhone.setText(null);
        etPassword.setText(null);
        Log.e("LoginActivity","onTouch()进入删除电话");
      }
    }
    //判断是否是密码删除
    if(v.getId() == R.id.pwd){
      drawable = etPassword.getCompoundDrawables()[2];
      //判断有没有图片
      if(drawable == null)return false;
      //判断是不是按下事件
      if(event.getAction() != MotionEvent.ACTION_UP)return false;
      if (event.getX() > etPassword.getWidth()- etPassword.getPaddingRight()
          - drawable.getIntrinsicWidth()){
        Log.e("LoginActivity","onTouch()进入删除密码");
        etPassword.setText(null);
      }
    }
    return false;
  }
  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position,
      long id) {
    User user = (User)parent.getAdapter().getItem(position);
    etPhone.setText(user.getId());
    etPassword.setText(user.getPwd());
  }
  @Override
  public void deleteUserClick(final View v) {
    final User user = userAdapter.getItem((Integer)v.getTag());
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle(getString(R.string.tips))
    .setMessage(getString(R.string.sure_clear)+"("+user.getId()+")?")
    .setNegativeButton(getString(R.string.cancle), null)
    .setPositiveButton(getString(R.string.sure), new DialogInterface.OnClickListener(){
      @Override
      public void onClick(DialogInterface dialog, int which) {
        listUsers = LocalInfoUtil.getUser(context);
        if(listUsers == null){
          return;
        }
        Log.e(TAG,""+listUsers.size());
        for (int i = 0; i < listUsers.size(); i++) {
          if(user.getId().equals(listUsers.get(i).getId())){
            listUsers.remove(i);
            String account = LocalInfoUtil.getValueFromSP(context, Constants.LOACAL_FILE_NAME,
                Constants.CUSTOME_PHONE_NUN);
            if(account != null && user.getId().equals(account)){
              Log.e(TAG,"清理内存中的对应的账户与密码");
              etPassword.setText(null);
              etPhone.setText(null);
              LocalInfoUtil.clearValuesByKey(context, Constants.LOACAL_FILE_NAME,
                  Constants.CUSTOME_PHONE_NUN);
              LocalInfoUtil.clearValuesByKey(context, Constants.LOACAL_FILE_NAME,
                  Constants.CUSTOME_PWD);
            }
            break;
          }
        }
        LocalInfoUtil.saveUser(context, listUsers);
        userAdapter.setListUsers(listUsers);
        Log.e(TAG, "listUsers.size()="+listUsers.size());
        Message message = new Message();
        message.obj = listUsers.size();
        message.what = UPDATE_POPUWINDOW_HEIGHT_DELETE;
        myHandler.sendMessage(message);
      }
    }).show();
  }
  @Override
  public void beforeTextChanged(CharSequence s, int start, int count,
      int after) {
  }
  @Override
  public void onTextChanged(CharSequence s, int start, int before, int count) {
    if(before > 0){
      Log.e(TAG, "onTextChanged before>0=true");
      etPassword.setText(null);
    }
    Log.e(TAG, "onTextChanged start=" + start + " count="+count);
    if((start + count) == 11){
      listUsers = LocalInfoUtil.getUser(context);
      if(listUsers != null){
        Log.e(TAG, "onTextChanged s=" + s);
        for(User user:listUsers){
          if(s.toString().equals(user.getId())){
            etPassword.setText(user.getPwd());
            break;
          }
          Log.e(TAG, "onTextChanged " + user.getId());
        }
      }
    }
  }
  @Override
  public void afterTextChanged(Editable s) {
  }
  @Override
  public void onFocusChange(View v, boolean hasFocus) {
    if(v.getId() == R.id.mobilenum){
      Log.e(TAG, "onFocusChange mobilenum");
      if(hasFocus){
        Log.e(TAG, "onFocusChange 图片显示");
        etPhone.setCompoundDrawablesWithIntrinsicBounds(null, null,
            getResources().getDrawable(R.drawable.login_delete_account), null);
      }else{
        Log.e(TAG, "onFocusChange 图片隐藏");
        etPhone.setCompoundDrawablesWithIntrinsicBounds(null, null,null, null);
      }
    }
    if(v.getId() == R.id.pwd){
      if(hasFocus){
        etPassword.setCompoundDrawablesWithIntrinsicBounds(null, null,
            getResources().getDrawable(R.drawable.login_delete_account), null);
      }else{
        etPassword.setCompoundDrawablesWithIntrinsicBounds(null, null,null, null);
      }
    }
  }
  @Override
  public void onDismiss() {
    myHandler.sendEmptyMessage(UPDATE_POPUWINDOW_HEIGHT_DISMISS);
  }
}

遇到的问题和解决方法:

1、当EditText有焦点时,键盘弹出,弹出框就会出现在顶部,有设置过当弹出框之前隐藏掉键盘,但不行。如下图

2、点击图片按钮popouWindow弹出,箭头是向上,再点击图片按钮,popouWindow消失,图片向下。一开始用图片按钮来控制这个效果,但是popouWindow把这个焦点失去了,所以用popouWindow的消失事件来监听

以上所述是小编给大家介绍的Android登录记住多个密码的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android登录记住多个密码的实现方法

    先给大家说下我实现的思路: 在popouWindow里面加上ListView,数据是把List以字符串按照JSON的样式存入本地,先看看效果 adapter_user_item.xml是listView item中的布局,就一个图片按钮和一个显示按钮 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/

  • Android设计登录界面、找回密码、注册功能

    本文实例为大家分享了Android 登录.找回密码.注册功能的实现代码,供大家参考,具体内容如下 1.数据库的设计 我在数据库中添加了两张表,一张表用来存储用户信息,诸如用户名,密码,手机号等,可任意添加.另一张表用来存储上一个登录用户的账户信息,我是为了方便才另外创建了一张表去存储,而且这张表我设计了它只能存储一条信息,每次的存储都是对上一条记录的覆盖.事实上,我尝试过在存储用户信息的那张表内添加一个标识,用来标记上一次登录的是哪一个帐号,但是这样做的话,每次改变标识都需要遍历整张表,十分的麻

  • Android 开发仿简书登录框可删除内容或显示密码框的内容

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedittextdemo; import android.content.Context; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.text.Editable; impor

  • Android SharedPreferences实现记住密码和自动登录界面

    SharedPreferences介绍: SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置参数,它是采用xml文件存放数据的,文件存放在"/data/data<package name>/shared_prefs"目录下. SharedPreferences的用法: 由于SharedPreferences是一个接口,而且在这个接口里没有提供写入数据和读取数据的能力.但它是通过其Editor接口中的一些方法来操作Shared

  • Android登录时密码保护功能

    在很多的Android项目中都需要用户登录.注册.这样的话在开发中做好保护用户密码的工作就显得尤为重要.这里我把自己的密码保护方法记录下来. 这是我建了一个保存密码的文件,以便于检查自己保存密码或者上传到服务器的时候密码是否已经被保护了.这就是当我输入用户名和密码之后点击记住密码之后 保存在SD卡上的文件,打开之后可以明显的看到密码已经被保护了. 下面是我的布局文件以及主程序的代码: <RelativeLayout xmlns:android="http://schemas.android

  • Android实现登录界面记住密码的存储

    Android存储方式有很多种,在这里所用的存储方式是SharedPreferrences, 其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入.所以比较适合我们今天做的这个项目.我们来看一下运行图: 一.布局界面 1.login_top.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a

  • Android 登录密码信息进行RSA加密示例

    首先 有服务端生产一对公钥和私钥 我们在进行加密之前,先从服务器获取公钥,获取到公钥串之后,在对密码进行加密. 复制代码 代码如下: map.put("password", new String(Hex.encodeHex(RSAUtils.encryptByPublicKey(password,rsastr)))); 此处,就是在登陆之前,对密码进行加密 password:登录密码 rsastr:从服务器获取的公钥串 Hex.encodeHex:对加密后的密码串进行编码,项目中需要集

  • Android 使用SharedPreferrences储存密码登录界面记住密码功能

    Android存储方式有很多种,在这里所用的存储方式是SharedPreferrences, 其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入.所以比较适合我们今天做的这个项目.我们来看一下运行图: 一.布局界面 1.login_top.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.a

  • Android实现用户登录记住密码功能

    一.打开之前完成的Case_login进行修改再编辑 二.将注册按钮删除并在登录按钮前拖出一个checkBox,编辑代码如下: 在layout_top.xml文件中进行编辑 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_

  • Android通过SharedPreferences实现自动登录记住用户名和密码功能

    最近Android项目需要一个自动登录功能,完成之后,特总结一下,此功能依靠SharedPreferences进行实现. SharedPreferences简介 SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data/data/<包名>/shared_prefs目录下.SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现

  • Android实现记住用户名和密码功能

    Android 实现记住用户名和密码的功能是通过SharedPreference 存储来实现的.创建一个复选按钮,通过按钮的否选取来进行事件处理.若按钮选中存储账号和密码的信息.若按钮没有选中,则清空账号和密码的信息. 结果演示: 源代码下载地址: https://github.com/GXS1225/Android-----.git 分析 (1)判断是否输入了账号和密码 if(name.trim().equals("")){ Toast.makeText(this, "请您

  • vue登录页实现使用cookie记住7天密码功能的方法

    问题描述 项目的登录页中,会有要求记住7天密码的功能,本篇文章记录一下写法,主要是使用cookie,注释我写的很详细了,大家可以看一下我写的注释的步骤,还是比较详细的.亲测有效 html部分 代码图示 效果图示 代码粘贴 <el-form ref="form" :model="form" label-width="80px" label-position="top" @submit.native.prevent >

  • Javascript实现登录记住用户名和密码功能

    话不多说,请看代码: <script type="text/javascript"> $(document).ready(function () { $("#UserAccount").focus(); //记住用户名和密码 $('#remebers').click(function () { if ($("#UserAccount").val() == "") { alert("用户名不能为空!&quo

  • android实现记住用户名和密码以及自动登录

    毕业刚开始上班接触的第一个项目移动护士站,接到了第一任务就是登录,要用到自动登录功能,所以在这做个记录,以后用的时候直接来粘贴复制,废话少说,直奔主题 先上一下效果图,由于只是实现功能,界面没有美化,见谅 由于xml文件内容,就不展现在这了,自己写一写就好,爸妈再也不用担心我的学习了,so easy package com.sdufe.login; import android.app.Activity; import android.content.Context; import androi

  • Android Walker登录记住密码页面功能实现

    本文实例为大家分享了Android Walker登录记住密码页面的具体代码,供大家参考,具体内容如下 目标效果: 这一次修改的不多,添加了点击用户登录的跳转,登录页面的记住密码,和程序运行一次后,不进入导航页面的功能. 1.MainActivity.java页面修改了setOnItemClickListener的点击事件,进行跳转. MainActivity.java页面: package com.example.login; import java.util.ArrayList; import

  • Android通过"记住密码"功能学习数据存储类SharedPreferences详解及实例

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean.int.float.long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中. 一.简介 它提供一种轻量级的数据存储方式,通过eidt()方法来修改里面的内容,通过Commit()方法来提交修改后的内容. 二.重要方法 public abstract boole

  • Android实现记住密码小功能

    本文实例为大家分享了Android实现记住密码小功能的具体代码,供大家参考,具体内容如下 以下有三个点 第一点是记住密码, 第二点是点击隐藏点击显示, 第三点是登录存储. XML布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app=&q

  • Android通过记住密码功能学习数据存储类SharedPreferences详解及实例

    SharedPreferences是Android中存储简单数据的一个工具类.可以想象它是一个小小的Cookie,它通过用键值对的方式把简单数据类型(boolean.int.float.long和String)存储在应用程序的私有目录下(data/data/包名/shared_prefs/)自己定义的xml文件中. 一.简介 它提供一种轻量级的数据存储方式,通过eidt()方法来修改里面的内容,通过Commit()方法来提交修改后的内容. 二.重要方法 public abstract boole

随机推荐