男人与女人的游戏,旋转的爱国语版下载,汤汤汤博客专业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登录记住多个密码的实现方法,希望对大家有所帮助
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android studio开发小型对话机器人app(实例代码)
Android通过Java sdk的方式接入OpenCv的方法
Android 通过cmake的方式接入opencv的方法步骤
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
Android 进度条 ProgressBar的实现代码(隐藏、出现、加载进度)
网友评论