Android实战系统对话框实现登陆注册功能

移动开发 Android
在android的应用中越来越多的包含了网络互动功能,这就带来了注册,登陆账号功能.本文完整的介绍对话框的方式实现用户登陆功能.

Android实例呈现效果和实现说明

登陆界面 

注册界面

下面是实现的效果图

实现的效果说明:

登陆效果: 应用程序判断当前用户还未登陆,弹出登陆对话框,用户输入账号和密码信息后,传到服务器验证,验证成功后,现实Toast 成功信息,并转到其他界面

注册效果:用户如没有账号,则点击登陆对话框的 “没有账号,快速注册账号”

弹出注册界面,用户输入注册信息,点击注册按钮,注册成功后,弹出toast信息”注册成功”,完成注册后,转到其他功能界面。

功能实现说明:

整个功能大体上分两块

登陆对话框:输入登陆信息,实现登陆功能,转到注册界面

注册对话框:输入注册信息,实现注册功能

#p#

2 登陆对话框的实现

2.1 对话框界面布局xml文件

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"     
  3.  android:layout_width="fill_parent"    
  4.  android:layout_height="wrap_content"    
  5.  android:orientation="vertical"> 
  6. <TextView 
  7.  android:id="@+id/txt_loginerror"    
  8.  android:layout_height="wrap_content"   
  9.  android:layout_width="wrap_content" 
  10.  android:layout_marginLeft="20dip" 
  11.  android:layout_marginRight="20dip" 
  12.  android:textColor="#ff0000" 
  13.  android:text="输入的账号和密码不正确" 
  14.  android:gravity="left" 
  15.  android:textAppearance="?  
  16.  android:attr/textAppearanceMedium"  
  17.  android:visibility="invisible" 
  18. /> 
  19. <TextView 
  20.  android:id="@+id/username"   
  21.  android:layout_height="wrap_content" 
  22.  android:layout_width="wrap_content" 
  23.  android:layout_marginLeft="20dip" 
  24.  android:layout_marginRight="20dip" 
  25.  android:text="账号" 
  26.  android:gravity="left" 
  27.  android:textAppearance="?  
  28.  android:attr/textAppearanceMedium"  
  29. /> 
  30. <EditText 
  31.  android:id="@+id/txt_username" 
  32.  android:layout_height="wrap_content" 
  33.  android:layout_width="fill_parent" 
  34.  android:layout_marginLeft="20dip" 
  35.  android:layout_marginRight="20dip" 
  36.  android:autoText="false" 
  37.  android:capitalize="none" 
  38. androidandroid:gravity="fill_horizontal"android:textAppearance="? android:attr/textAppearanceMedium" 
  39.  />     
  40.  <TextView 
  41.  android:id="@+id/password" 
  42.  android:layout_height="wrap_content" 
  43.  android:layout_width="wrap_content" 
  44.  android:layout_marginLeft="20dip" 
  45.  android:layout_marginRight="20dip" 
  46. android:textAppearance="android:attr/textAppearanceMedium" 
  47.  android:text="密码" 
  48. android:gravity="left" 
  49. /> 
  50. <EditText        
  51.  android:id="@+id/txt_password" 
  52.  android:layout_height="wrap_content" 
  53.  android:layout_width="fill_parent" 
  54.  android:layout_marginLeft="20dip" 
  55.  android:layout_marginRight="20dip" 
  56.  android:autoText="false" 
  57.  android:capitalize="none" 
  58.  android:gravity="fill_horizontal" 
  59. android:textAppearance="android:attr/textAppearanceMedium" 
  60. />              
  61. <TextView   
  62. android:id="@+id/txt_toregister" 
  63. android:layout_height="wrap_content" 
  64. android:layout_width="wrap_content" 
  65. android:layout_marginLeft="20dip" 
  66. android:layout_marginRight="20dip"   
  67. android:textColor="#2200C1" 
  68. android:textAppearance="?  
  69. android:attr/textAppearanceMedium"   
  70. android:text="没有账号?快速注册" 
  71. android:gravity="left" 
  72. />   
  73. </LinearLayout> 

#p#

2.2 后台业务逻辑

  1. /*  
  2.      * 创建用户登陆的对话框  
  3.      * 登陆界面包含两个按钮  
  4.      * 1按钮为登陆  
  5.      * 2按钮为不登陆试玩  
  6.      * */  
  7.     private void CreateLoginAlert()  
  8.     {  
  9.         AlertDialog.Builder ad =new AlertDialog.Builder(this);  
  10.         ad.setTitle("账号登陆");  
  11.         ad.setView(ViewUtility.GetView(this,R.layout.sub_logindialog));  
  12.         adadi=  ad.create();      
  13.     /*       
  14.         */  
  15.         adi.setButton("登陆", new OnClickListener(){  
  16.  
  17.             @Override  
  18.             public void onClick(DialogInterface arg0, int arg1) {  
  19.               
  20.                 EditText password=    (EditText)adi.findViewById(R.id.txt_password);  
  21.                 EditText account =(EditText)adi.findViewById(R.id.txt_username);  
  22.                   
  23.                 PassWord=password.getText().toString();  
  24.                 Account=account.getText().toString();  
  25.                 //生成登陆对话框  
  26.                 m_Dialog=ProgressDialog.show(Main.this, "请等待...", "正在为你登陆...",true);  
  27.  
  28.                 mRedrawHandler.sleep(100);          
  29.             }  
  30.         });         
  31.         adi.setButton2("试  玩", new OnClickListener(){  
  32.             @Override  
  33.             public void onClick(DialogInterface arg0, int arg1) {  
  34.                 ViewUtility.NavigateActivate(Main.this, SelectTheme.class);  
  35.             }  
  36.         });          
  37.         adi.show();        
  38.          //设置注册点击事件  
  39.         TextView  register=(TextView)adi.findViewById(R.id.txt_toregister);  
  40.         register.setOnClickListener(new  TextView.OnClickListener()  
  41.         {  
  42.            public void onClick(View v){  
  43.                //创建注册对话框  
  44.              CreateRegisterAlert();  
  45.                adi.dismiss();  
  46.                  
  47.            }  
  48.        });       
  49.     }     
  50.     /*  
  51.      *定时线程做验证用  
  52.      * */  
  53.     private RefreshHandler mRedrawHandler = new RefreshHandler();  
  54.       
  55.     class RefreshHandler extends Handler {  
  56.  
  57.         @Override  
  58.         public void handleMessage(Message msg) {  
  59.                 
  60.             try{  
  61.                   
  62.                  //调用网络接口,实现登陆指令  
  63.                Boolean flags=    UserDataServiceHelper.Login(Account, PassWord);      
  64.                if(flags)      
  65.               {  
  66.                 //保存登陆信息  
  67.                 UserDataWriteHelper uw=new UserDataWriteHelper(Main.this);  
  68.                 uw.SaveUserInfoInDB("xuwenbing", Account);  
  69.                 //提示登陆成功  
  70.                  Toast.makeText(Main.this, "登陆成功", Toast.LENGTH_SHORT).show();          
  71.                  //转到主题页面  
  72.                    ViewUtility.NavigateActivate(Main.this, SelectTheme.class);  
  73.                }else  
  74.                {  
  75.                 //失败 显示错误信息  
  76.                  Toast.makeText(Main.this, "登陆失败", Toast.LENGTH_SHORT).show();  
  77.                  adi.show();  
  78.                  adi.findViewById(R.id.txt_loginerror).setVisibility(View.VISIBLE);  
  79.                 }  
  80.             }  
  81.             catch(Exception e)  
  82.             {  
  83.                 e.printStackTrace();                              
  84.             }  
  85.             finally{  
  86.                 m_Dialog.dismiss();          
  87.             }  
  88.         }  
  89.         public void sleep(long delayMillis) {  
  90.             this.removeMessages(0);  
  91.             sendMessageDelayed(obtainMessage(0), delayMillis);  
  92.         }  
  93.     }; 

#p#

 3 注册对话框的实现
 3.1  对话框界面布局xml文件

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.    android:layout_width="fill_parent" 
  4.    android:layout_height="wrap_content" 
  5.    android:orientation="vertical">     
  6.     <LinearLayout 
  7.    android:layout_width="fill_parent" 
  8.    android:layout_height="wrap_content" 
  9.    android:orientation="horizontal" 
  10.    android:gravity="center" 
  11.    > 
  12.    <TextView 
  13.       android:id="@+id/txt_loginerror" 
  14.       android:layout_height="wrap_content" 
  15.       android:layout_width="wrap_content" 
  16.       android:layout_marginLeft="20dip" 
  17.       android:layout_marginRight="20dip" 
  18.       android:textColor="#ff0000" 
  19.       android:text="输入的账号和密码不正确" 
  20.       android:gravity="left" 
  21.       android:textAppearance="?android:attr/textAppearanceMedium"   
  22.       android:visibility="invisible" 
  23.    /> 
  24.    </LinearLayout>     
  25.     <LinearLayout 
  26.    android:layout_width="fill_parent" 
  27.    android:layout_height="wrap_content" 
  28.    android:orientation="horizontal"     
  29.    > 
  30.    <TextView 
  31.       android:id="@+id/username" 
  32.       android:layout_height="wrap_content" 
  33.       android:layout_width="wrap_content" 
  34.       android:layout_marginLeft="20dip" 
  35.       android:layout_marginRight="20dip" 
  36.       android:text="账号" 
  37.       android:gravity="left" 
  38.       android:textAppearance="?android:attr/textAppearanceMedium"   
  39.    /> 
  40.         
  41.     <EditText 
  42.       android:id="@+id/txt_username" 
  43.       android:layout_height="wrap_content" 
  44.       android:layout_width="fill_parent" 
  45.       android:layout_marginLeft="20dip" 
  46.       android:layout_marginRight="20dip" 
  47.       android:autoText="false" 
  48.       android:capitalize="none" 
  49.       android:gravity="fill_horizontal" 
  50.       android:textAppearance="?android:attr/textAppearanceMedium"   
  51.       /> 
  52.       </LinearLayout> 
  53.         
  54.         <LinearLayout 
  55.    android:layout_width="fill_parent" 
  56.    android:layout_height="wrap_content" 
  57.    android:orientation="horizontal" 
  58.      
  59.    > 
  60.     <TextView 
  61.       android:id="@+id/password" 
  62.       android:layout_height="wrap_content" 
  63.       android:layout_width="wrap_content" 
  64.       android:layout_marginLeft="20dip" 
  65.       android:layout_marginRight="20dip" 
  66.       android:textAppearance="?android:attr/textAppearanceMedium"   
  67.       android:text="密码" 
  68.       android:gravity="left" 
  69.       /> 
  70.     <EditText 
  71.       android:id="@+id/txt_password" 
  72.       android:layout_height="wrap_content" 
  73.       android:layout_width="fill_parent" 
  74.       android:layout_marginLeft="20dip" 
  75.       android:layout_marginRight="20dip" 
  76.       android:autoText="false" 
  77.       android:capitalize="none" 
  78.       android:gravity="fill_horizontal" 
  79.       android:textAppearance="?android:attr/textAppearanceMedium"   
  80.      /> 
  81.      </LinearLayout> 
  82.        <LinearLayout 
  83.      android:layout_width="fill_parent" 
  84.      android:layout_height="wrap_content" 
  85.      android:orientation="horizontal" 
  86.    > 
  87.        <TextView 
  88.       android:id="@+id/nicename" 
  89.       android:layout_height="wrap_content" 
  90.       android:layout_width="wrap_content" 
  91.       android:layout_marginLeft="20dip" 
  92.       android:layout_marginRight="20dip" 
  93.       android:textAppearance="?android:attr/textAppearanceMedium"   
  94.       android:text="昵称" 
  95.       android:gravity="left" 
  96.       /> 
  97.     <EditText 
  98.       android:id="@+id/txt_nicename" 
  99.       android:layout_height="wrap_content" 
  100.       android:layout_width="fill_parent" 
  101.       android:layout_marginLeft="20dip" 
  102.       android:layout_marginRight="20dip" 
  103.       android:autoText="false" 
  104.       android:capitalize="none" 
  105.       android:gravity="fill_horizontal" 
  106.       android:textAppearance="?android:attr/textAppearanceMedium"   
  107.      />     
  108.    </LinearLayout>      
  109. </LinearLayout> 

#p#

3.2  后台业务逻辑

  1. /*创建注册对话框*/  
  2.     private void CreateRegisterAlert()  
  3.     {  
  4.         //registerdialog  
  5.         AlertDialog.Builder ad =new AlertDialog.Builder(this);  
  6.         ad.setTitle("注册账号");  
  7.         ad.setView(ViewUtility.GetView(this,R.layout.sub_registerdialog));  
  8.         registerdialog=  ad.create();          
  9.         registerdialog.setButton("注册", new OnClickListener(){  
  10.             @Override  
  11.             public void onClick(DialogInterface arg0, int arg1) {            
  12.                 EditText password=    (EditText)registerdialog.findViewById(R.id.txt_password);  
  13.                 EditText account =(EditText)registerdialog.findViewById(R.id.txt_username);  
  14.                 EditText nicename =(EditText)registerdialog.findViewById(R.id.txt_nicename);                 
  15.                 PassWord=password.getText().toString();  
  16.                 Account=account.getText().toString();  
  17.                 NiceName=nicename.getText().toString();  
  18.                 //生成注册对话框  
  19.                 m_Dialog=ProgressDialog.show(Main.this, "请等待...", "正在为你注册...",true);  
  20.                 mRegsiterHandler.sleep(100);          
  21.             }  
  22.         });          
  23.         registerdialog.setButton2("试  玩", new OnClickListener(){  
  24.             @Override  
  25.             public void onClick(DialogInterface arg0, int arg1) {  
  26.                 ViewUtility.NavigateActivate(Main.this, SelectTheme.class);  
  27.             }  
  28.         });          
  29.         registerdialog.show();        
  30.     }  
  31.     /*  
  32.      *定时注册程序  
  33.      * */  
  34.     private RegsiterHandler mRegsiterHandler = new RegsiterHandler();  
  35.       
  36.     class RegsiterHandler extends Handler {  
  37.  
  38.         @Override  
  39.         public void handleMessage(Message msg) {  
  40.                 
  41.             try{  
  42.                   
  43.                  //调用网络接口,实现注册指令  
  44.                Boolean flags=    UserDataServiceHelper.Register(Account, PassWord,NiceName);      
  45.                if(flags)      
  46.               {  
  47.                 //保存注册信息  
  48.                 UserDataWriteHelper uw=new UserDataWriteHelper(Main.this);  
  49.                 uw.SaveUserInfoInDB("xuwenbing", Account);  
  50.                 //提示注册成功  
  51.                  Toast.makeText(Main.this, "注册成功", Toast.LENGTH_SHORT).show();          
  52.                  //转到主题页面  
  53.                    ViewUtility.NavigateActivate(Main.this, SelectTheme.class);  
  54.                }else  
  55.                {  
  56.                 //失败 显示错误信息  
  57.                  Toast.makeText(Main.this, "注册失败", Toast.LENGTH_SHORT).show();  
  58.                  registerdialog.show();  
  59.                  registerdialog.findViewById(R.id.txt_loginerror).setVisibility(View.VISIBLE);  
  60.                 }  
  61.             }  
  62.             catch(Exception e)  
  63.             {  
  64.                 e.printStackTrace();                              
  65.             }  
  66.             finally{  
  67.                 m_Dialog.dismiss();          
  68.             }  
  69.         }  
  70.         public void sleep(long delayMillis) {  
  71.             this.removeMessages(0);  
  72.             sendMessageDelayed(obtainMessage(0), delayMillis);  
  73.         }  
  74.     }; 

【编辑推荐】

Android布局属性详解

谷歌Android UI设计技巧:框架特性

Android开发:Activity之间的传值

 

Android中focusable属性的妙用——底层按钮的实现

责任编辑:zhaolei 来源: 网络转载
相关推荐

2010-08-05 10:42:41

Android开发Android高级编程

2011-07-01 11:33:00

Qt 模态 非模态

2009-12-28 13:47:35

WPF对话框

2010-01-28 16:55:26

Android对话框

2011-06-02 10:37:02

Android 对话框

2011-11-21 10:26:05

jQuery

2009-12-11 15:35:50

PHP弹出对话框

2009-12-28 14:32:31

WPF窗体对话框

2021-07-11 07:34:23

Windows 11操作系统微软

2017-10-12 11:48:09

iOS系统弹窗Apple ID

2011-07-21 15:50:42

jQuery Mobi页面对话框

2009-10-20 14:05:42

VB.NET路径

2011-09-15 09:52:45

Delphi XE2

2010-09-29 15:56:02

J2ME对话框

2010-01-11 09:33:32

VB.NET对话框调用

2009-12-29 15:24:48

WPF对话框

2011-11-23 09:47:36

Winform

2011-05-20 16:49:21

VB.NET

2012-02-15 17:17:02

开放平台

2011-07-22 15:32:53

iPhone 按钮 对话框
点赞
收藏

51CTO技术栈公众号