【小功能1】android登录时记住和显示密码功能

简介:

       好久没写博客了,自从进入新公司以来学到了很多知识,博客是把自己学过的知识存储并方便以后查看的好工具,最近一直在研究4.0源码,以后更多的是深入研究源码,对于应用可能写的会很少,但是无论如何每天积累点,每天都学点,刚进公司老大让写一个记事本程序,要求能够登录,我在写的时候加入了记住密码和显示密码的功能,原本想加自动登录功能,但是还是两个选项比较合适,多了不多,直接上代码。(今天时间较紧,写的很仓促)

 
 
  1. package com.gionee.android.notepad.noteactivity;  
  2.  
  3. import com.gionee.android.notepad.service.FileService;  
  4.  
  5. import android.app.Activity;  
  6. import android.app.AlertDialog;  
  7. import android.app.AlertDialog.Builder;  
  8. import android.content.DialogInterface;  
  9. import android.content.Intent;  
  10. import android.content.SharedPreferences;  
  11. import android.os.Bundle;  
  12. import android.text.Editable;  
  13. import android.text.InputType;  
  14. import android.text.TextWatcher;  
  15. import android.text.method.HideReturnsTransformationMethod;  
  16. import android.text.method.PasswordTransformationMethod;  
  17. import android.view.KeyEvent;  
  18. import android.view.View;  
  19. import android.view.View.OnClickListener;  
  20. import android.widget.ArrayAdapter;  
  21. import android.widget.AutoCompleteTextView;  
  22. import android.widget.Button;  
  23. import android.widget.CheckBox;  
  24. import android.widget.EditText;  
  25. import android.widget.Toast;  
  26.  
  27. /**   
  28.  * @author Ma Guohui  
  29.  * @FileDescription:登陆Activity  
  30.  * @version 2012-10-26 下午2:55:03  
  31.  * @ChangeList:  
  32.  */ 
  33.  
  34. public class Gn_LoginActivity extends Activity {  
  35.       
  36.     private AutoCompleteTextView mUserNameAuto;  
  37.     private EditText mPasswordEt;  
  38.     private Button mLoginBt;  
  39.     private Button mCancelBt;  
  40.     private String mUserStr;  
  41.     private String mPwdStr;  
  42.     private CheckBox mRemPwdCb;  
  43.     private CheckBox mShowpwdCb;  
  44.     private SharedPreferences mPasswordSp;  
  45.     private FileService fileService;  
  46.  
  47.     @Override 
  48.     public void onCreate(Bundle savedInstanceState) {  
  49.         super.onCreate(savedInstanceState);  
  50.         setContentView(R.layout.main);  
  51.         mUserNameAuto = (AutoCompleteTextView) findViewById(R.id.cardNumAuto);  
  52.         mPasswordEt = (EditText) findViewById(R.id.editPwd);  
  53.         mLoginBt = (Button) findViewById(R.id.button1);  
  54.         mCancelBt = (Button) findViewById(R.id.button2);  
  55.         mRemPwdCb = (CheckBox) findViewById(R.id.checkBox1);  
  56.         mShowpwdCb = (CheckBox) findViewById(R.id.checkBox2);  
  57.         fileService = new FileService(this);  
  58.           
  59.         savePassword();  
  60.           
  61.         mLoginBt.setOnClickListener(new OnClickListener() {//登陆按钮设置监听事件  
  62.  
  63.             public void onClick(View v) {  
  64.                 // FileService fileService = new FileService(this);  
  65.                 // TODO Auto-generated method stub  
  66.                 // user = username.getText().toString();  
  67.                 mUserStr = mUserNameAuto.getText().toString().trim();  
  68.                 mPwdStr = mPasswordEt.getText().toString().trim();  
  69.  
  70.                 if (fileService.login(mUserStr, mPwdStr)) {//执行登录验证操作(fieService是另一个类的实例哦)
  71.                     if (mRemPwdCb.isChecked()) {  //选择记住密码功能
  72.                         mPasswordSp.edit().putString(mUserStr, mPwdStr).commit();//记住密码,把密码信息放入SharedPreferences文件中  
  73.                     }  
  74.                     Intent intent = new Intent(Gn_LoginActivity.this,  
  75.                             MainActivity.class);  
  76.                     startActivity(intent);  //跳转到其他显示界面
  77.                     Gn_LoginActivity.this.finish();  
  78.                 } else {  //提示密码错误
  79.                     Toast.makeText(Gn_LoginActivity.this, getResources().getString(R.string.password_error),  
  80.                             Toast.LENGTH_SHORT).show();  
  81.                 }  
  82.             }  
  83.  
  84.         });  
  85.         mCancelBt.setOnClickListener(new OnClickListener() {//取消事件监听  
  86.  
  87.             @Override 
  88.             public void onClick(View v) {  
  89.                 // TODO Auto-generated method stub  
  90.                 dialog();//显示对话框  
  91.             }  
  92.         });  
  93.         mShowpwdCb.setOnClickListener(new OnClickListener() {//显示密码事件操作  
  94.             /*  
  95.              * 明文显示密码 :  
  96.              * 明文显示:android.text.method.HideReturnsTransformationMethod ;  
  97.              * 密文显示:android.text.method.PasswordTransformationMethod ;  
  98.              */ 
  99.             @Override 
  100.             public void onClick(View v) {  
  101.                 // TODO Auto-generated method stub  
  102.                 if (mShowpwdCb.isChecked()) {// 被选中,则显示明文  
  103.                     // 将文本框的内容设置成明文显示  
  104.                     mPasswordEt.setTransformationMethod(HideReturnsTransformationMethod  
  105.                             .getInstance());  
  106.                 } else {  
  107.                     // 将文本框内容设置成密文的方式显示  
  108.                     mPasswordEt.setTransformationMethod(PasswordTransformationMethod  
  109.                             .getInstance());  
  110.                 }  
  111.             }  
  112.         });  
  113.     }  
  114.  
  115.     @Override 
  116.     public boolean onKeyDown(int keyCode, KeyEvent event) {//监听返回键事件  
  117.         // TODO Auto-generated method stub  
  118.         if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {  
  119.             dialog();  
  120.         }  
  121.         return false;  
  122.     }  
  123.  
  124.     private void dialog() {//显示对话框方法  (退出时哦)
  125.         AlertDialog.Builder builder = new Builder(Gn_LoginActivity.this);  
  126.         builder.setMessage(this.getResources().getString(R.string.isLogout));  
  127.         builder.setTitle(this.getResources().getString(R.string.logoutPrompt));  
  128.         builder.setPositiveButton(this.getResources().getString(R.string.logout_yes), new DialogInterface.OnClickListener() {  
  129.  
  130.             @Override 
  131.             public void onClick(DialogInterface dialog, int which) {  
  132.                 // TODO Auto-generated method stub  
  133.                 dialog.dismiss();  
  134.                 Gn_LoginActivity.this.finish();  
  135.             }  
  136.  
  137.         });  
  138.         builder.setNegativeButton(this.getResources().getString(R.string.logout_no), new DialogInterface.OnClickListener() {  
  139.  
  140.             @Override 
  141.             public void onClick(DialogInterface dialog, int which) {  
  142.                 dialog.dismiss();  
  143.             }  
  144.         });  
  145.         builder.create().show();  
  146.     }  
  147.  
  148.     private void savePassword() {//保存密码方法,数据放入SharedPreferences文件  
  149.         /*  
  150.          * 参数简述:  
  151.          * Name—获得SharedPreferences之后,将会在应用程序的私有文件夹中保存着一个XML文件,第一个参数name就是这个文件名字  
  152.          * 。 Mode—XML文件的保存模式,默认为0,也就是MODE_PRIVATE  
  153.          */ 
  154.         mPasswordSp = this.getSharedPreferences("passwordFile", MODE_PRIVATE);  
  155.         mRemPwdCb.setChecked(true);// 默认为记住密码  
  156.         mUserNameAuto.setThreshold(1);// 输入1个字母就开始自动提示  
  157.         // 隐藏密码为InputType.TYPE_TEXT_VARIATION_PASSWORD,也就是0x81  
  158.         // 显示密码为InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD,也就是0x91  
  159.         mPasswordEt.setInputType(InputType.TYPE_CLASS_TEXT  
  160.                 | InputType.TYPE_TEXT_VARIATION_PASSWORD);  
  161.         mUserNameAuto.addTextChangedListener(new TextWatcher() {  
  162.  
  163.             @Override 
  164.             public void onTextChanged(CharSequence s, int start, int before,  
  165.                     int count) {  
  166.                 // TODO Auto-generated method stub  
  167.                 String[] allUserName = new String[mPasswordSp.getAll().size()];// sp.getAll().size()返回的是有多少个键值对  
  168.                 allUserName = mPasswordSp.getAll().keySet().toArray(new String[0]);  
  169.                 ArrayAdapter<String> adapter = new ArrayAdapter<String>(  
  170.                         Gn_LoginActivity.this,  
  171.                         android.R.layout.simple_dropdown_item_1line,  
  172.                         allUserName);  
  173.                 mUserNameAuto.setAdapter(adapter);// 设置数据适配器  
  174.             }  
  175.  
  176.             @Override 
  177.             public void beforeTextChanged(CharSequence s, int start, int count,  
  178.                     int after) {  
  179.                 // TODO Auto-generated method stub  
  180.  
  181.             }  
  182.  
  183.             @Override 
  184.             public void afterTextChanged(Editable s) {  
  185.                 // TODO Auto-generated method stub  
  186.                 // 自动输入密码  
  187.                 mPasswordEt.setText(mPasswordSp.getString(mUserNameAuto.getText().toString(),  
  188.                         ""));  
  189.  
  190.             }  
  191.         });  
  192.     }  
  193. }  

布局文件内容

 
 
  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="fill_parent" 
  5.     android:orientation="vertical" > 
  6.  
  7.     <TextView 
  8.         android:layout_width="fill_parent" 
  9.         android:layout_height="wrap_content" 
  10.         android:text="@string/username" /> 
  11.     <AutoCompleteTextView   
  12.         android:id="@+id/cardNumAuto"   
  13.         android:layout_width="fill_parent"   
  14.         android:layout_height="wrap_content" >    
  15.     </AutoCompleteTextView>    
  16.       
  17.       
  18.     <TextView 
  19.         android:layout_width="fill_parent" 
  20.         android:layout_height="wrap_content" 
  21.         android:text="@string/password" /> 
  22.     <EditText 
  23.         android:id="@+id/editPwd" 
  24.         android:layout_width="match_parent" 
  25.         android:layout_height="wrap_content" 
  26.         android:ems="10" 
  27.         android:inputType="textPassword" > 
  28.  
  29.         <requestFocus /> 
  30.     </EditText> 
  31.  
  32.       
  33.     <LinearLayout android:id="@+id/LinearLayout01" 
  34.         android:layout_width="fill_parent" 
  35.         android:layout_height="wrap_content"   
  36.         android:gravity="center"> 
  37.          <CheckBox 
  38.         android:id="@+id/checkBox1" 
  39.         android:layout_width="wrap_content" 
  40.         android:layout_height="wrap_content" 
  41.         android:text="@string/rempwd" /> 
  42.  
  43.         <CheckBox 
  44.         android:id="@+id/checkBox2" 
  45.         android:layout_width="wrap_content" 
  46.         android:layout_height="wrap_content" 
  47.         android:text="@string/showpwd" /> 
  48.            </LinearLayout> 
  49.     <LinearLayout android:id="@+id/LinearLayout01" 
  50.         android:layout_width="fill_parent" 
  51.         android:layout_height="wrap_content"   
  52.         android:gravity="center"> 
  53.          <Button 
  54.         android:id="@+id/button1" 
  55.         android:layout_width="wrap_content" 
  56.         android:layout_height="wrap_content" 
  57.         android:text="登陆" /> 
  58.  
  59.     <Button 
  60.         android:id="@+id/button2" 
  61.         android:layout_width="wrap_content" 
  62.         android:layout_height="wrap_content" 
  63.         android:text="取消" /> 
  64.            </LinearLayout> 
  65. </LinearLayout> 

运行效果图(没图说个JB)

 

 

 










本文转自 646676684 51CTO博客,原文链接:http://blog.51cto.com/2402766/1073431,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
XML 缓存 Android开发
Android开发,使用kotlin学习多媒体功能(详细)
Android开发,使用kotlin学习多媒体功能(详细)
103 0
|
3月前
|
数据安全/隐私保护 Android开发
2023安卓逆向 -- 某合伙apk登录加密分析
2023安卓逆向 -- 某合伙apk登录加密分析
26 0
|
3月前
|
安全 Linux Android开发
Android 安全功能
Android 安全功能
37 0
|
4天前
|
Java Android开发
Android Mediatek 应用层重置USB设备功能
Android Mediatek 应用层重置USB设备功能
11 0
|
4月前
|
传感器 物联网 Android开发
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
【Android App】物联网中查看手机支持的传感器及实现摇一摇功能-加速度传感器(附源码和演示 超详细)
69 1
|
4月前
|
XML Java 定位技术
【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)
【Android App】定位导航GPS中开启手机定位功能讲解及实战(附源码和演示 超详细)
118 0
|
4月前
|
XML 前端开发 Java
【Android App】三维处理中三维投影OpenGL功能的讲解及实战(附源码和演示 超详细必看)
【Android App】三维处理中三维投影OpenGL功能的讲解及实战(附源码和演示 超详细必看)
34 1
|
4月前
|
JSON 语音技术 Android开发
【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)
【Android App】在线语音识别功能实现(使用云知声平台与WebSocket 超详细 附源码)
35 0
|
4月前
|
JSON Java 语音技术
【Android App】实现在线语音合成功能(使用云知声平台和WebSocket 超详细 附源码)
【Android App】实现在线语音合成功能(使用云知声平台和WebSocket 超详细 附源码)
43 0
|
4月前
|
XML Java 语音技术
Android App开发在线语音识别处理中实现中文转拼音(Pinyin4j库)功能(超详细 附源码和演示)
Android App开发在线语音识别处理中实现中文转拼音(Pinyin4j库)功能(超详细 附源码和演示)
68 0