当前位置: 移动技术网 > IT编程>移动开发>Android > Android登录记住多个密码的实现方法

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

男人与女人的游戏,旋转的爱国语版下载,汤汤汤博客专业gps

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

在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登录记住多个密码的实现方法,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网