您当前的位置: 首页 >  android

xiangzhihong8

暂无认证

  • 1浏览

    0关注

    1324博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

android自定义密码键盘

xiangzhihong8 发布时间:2014-01-25 16:02:18 ,浏览量:1

先上图 先看一下键盘的布局文件control_digitpasswordkeypad.xml
[html] view plain copy
  1.   
  2.   
  3.    
  4.       
  5.       
  6.    
  7.       
  8.    
  9.           
  10.    
  11.               
  12.           
  13.    
  14.           
  15.    
  16.               
  17.               
  18.    
  19.               
  20.               
  21.    
  22.               
  23.               
  24.           
  25.    
  26.           
  27.    
  28.               
  29.               
  30.    
  31.               
  32.               
  33.    
  34.               
  35.               
  36.           
  37.    
  38.           
  39.    
  40.               
  41.               
  42.    
  43.               
  44.               
  45.    
  46.               
  47.               
  48.           
  49.    
  50.           
  51.    
  52.               
  53.               
  54.    
  55.               
  56.               
  57.    
  58.               
  59.               
  60.           
  61.       
  62.    
  63.   
键盘布局文件截图如下: 下面看一下主界面的布局文件mian.xml
[html] view plain copy
  1.   
  2.   
  3.    
  4.       
  5.    
  6.   

主界面只有一个TextView控件,通过触发TextView的单击事件弹出自定义键盘

触发事件代码:

[java] view plain copy
  1. TextView editText = (TextView)findViewById(R.id.input);  
  2. editText.setOnClickListener(new OnClickListener() {  
  3.     @Override  
  4.     public void onClick(View v) {  
  5.         showPassWdPadView();  
  6.     }  
  7. });  
弹出自定义键盘方法showPassWdPadView()
[java] view plain copy
  1. private void showPassWdPadView() {  
  2.         this.runOnUiThread(new Runnable() {  
  3.             public void run() {  
  4.                 // 让一个视图浮动在你的应用程序之上  
  5.                 WindowManager windowmanager = (WindowManager) content.getSystemService(Context.WINDOW_SERVICE);  
  6.                 LayoutParams layoutparams = new LayoutParams(-1, -1, WindowManager.LayoutParams.FIRST_SUB_WINDOW, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.RGBA_8888);  
  7.                 layoutparams.gravity = Gravity.BOTTOM;  
  8.                 passwdview.findViewById(R.id.transpwdpdpanel).getBackground().setAlpha(140);  
  9.                 windowmanager.addView(passwdview, layoutparams);  
  10.             }  
  11.         });  
  12. }  

这里用到了WindowManager,具体用法可参考网上。

下面是主界面的全部代码

[java] view plain copy
  1. import android.app.Activity;  
  2. import android.content.Context;  
  3. import android.graphics.PixelFormat;  
  4. import android.os.Bundle;  
  5. import android.view.Gravity;  
  6. import android.view.View;  
  7. import android.view.WindowManager;  
  8. import android.view.View.OnClickListener;  
  9. import android.view.WindowManager.LayoutParams;  
  10. import android.widget.TextView;  
  11.    
  12. public class AndroidInputNumberActivity extends Activity {  
  13.     private DigitPasswordKeyPad dpk;  
  14.     private View passwdview;  
  15.     private Context content ;  
  16.     @Override  
  17.     public void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.main);  
  20.           
  21.         content = this;  
  22.           
  23.         dpk = new DigitPasswordKeyPad(this);  
  24.         passwdview = dpk.setup();  
  25.           
  26.         TextView editText = (TextView)findViewById(R.id.input);  
  27.         editText.setOnClickListener(new OnClickListener() {  
  28.             @Override  
  29.             public void onClick(View v) {  
  30.                 showPassWdPadView();  
  31.             }  
  32.         });  
  33.     }  
  34.       
  35.     private void showPassWdPadView() {  
  36.             this.runOnUiThread(new Runnable() {  
  37.                 public void run() {  
  38.                     // 让一个视图浮动在你的应用程序之上  
  39.                     WindowManager windowmanager = (WindowManager) content.getSystemService(Context.WINDOW_SERVICE);  
  40.                     LayoutParams layoutparams = new LayoutParams(-1, -1, WindowManager.LayoutParams.FIRST_SUB_WINDOW, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.RGBA_8888);  
  41.                     layoutparams.gravity = Gravity.BOTTOM;  
  42.                     passwdview.findViewById(R.id.transpwdpdpanel).getBackground().setAlpha(140);  
  43.                     windowmanager.addView(passwdview, layoutparams);  
  44.                 }  
  45.             });  
  46.     }  
  47. }  
上面代码中passwdview这个对象就是弹出键盘界面的View实例,passwdview这个对象是在DigitPasswordKeyPad中初始化得到。 DigitPasswordKeyPad类自定义键盘类,继承自View类
[java] view plain copy
  1. import android.content.Context;  
  2. import android.text.InputType;  
  3. import android.view.LayoutInflater;  
  4. import android.view.View;  
  5. import android.widget.Button;  
  6. import android.widget.EditText;  
  7.    
  8. /** 
  9.  * 系统定制的数字密码键盘 
  10.  * 
  11.  * @author twf 
  12.  * 
  13.  */  
  14. public class DigitPasswordKeyPad extends View {  
  15.     private Context ctx = null;  
  16.     private View v;  
  17.     private String digitnum = "";  
  18.     private int length = 6;  
  19.    
  20.     private Button digitkeypad_1;  
  21.     private Button digitkeypad_2;  
  22.     private Button digitkeypad_3;  
  23.     private Button digitkeypad_4;  
  24.     private Button digitkeypad_5;  
  25.     private Button digitkeypad_6;  
  26.     private Button digitkeypad_7;  
  27.     private Button digitkeypad_8;  
  28.     private Button digitkeypad_9;  
  29.     private Button digitkeypad_0;  
  30.     private Button digitkeypad_c;  
  31.     private Button digitkeypad_ok;  
  32.     private EditText digitkeypad_edittext;  
  33.    
  34.     private boolean isPwd;  
  35.    
  36.     public DigitPasswordKeyPad(Context ctx) {  
  37.         super(ctx);  
  38.         this.ctx = ctx;  
  39.     }  
  40.    
  41.     @Override  
  42.     protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {  
  43.     }  
  44.    
  45.     public void setEditTextIsPwd(boolean ispwd) {  
  46.         if (ispwd) {  
  47.             digitkeypad_edittext.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);  
  48.         } else {  
  49.             digitkeypad_edittext.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);  
  50.         }  
  51.         this.isPwd = ispwd;  
  52.     }  
  53.    
  54.     public View setup() {  
  55.         LayoutInflater lif = LayoutInflater.from(ctx);  
  56.         v = lif.inflate(R.layout.control_digitpasswordkeypad, null);  
  57.    
  58.         // 初始化 对象  
  59.         digitkeypad_1 = (Button) v.findViewById(R.id.digitkeypad_1);  
  60.         digitkeypad_2 = (Button) v.findViewById(R.id.digitkeypad_2);  
  61.         digitkeypad_3 = (Button) v.findViewById(R.id.digitkeypad_3);  
  62.         digitkeypad_4 = (Button) v.findViewById(R.id.digitkeypad_4);  
  63.         digitkeypad_5 = (Button) v.findViewById(R.id.digitkeypad_5);  
  64.         digitkeypad_6 = (Button) v.findViewById(R.id.digitkeypad_6);  
  65.         digitkeypad_7 = (Button) v.findViewById(R.id.digitkeypad_7);  
  66.         digitkeypad_8 = (Button) v.findViewById(R.id.digitkeypad_8);  
  67.         digitkeypad_9 = (Button) v.findViewById(R.id.digitkeypad_9);  
  68.         digitkeypad_0 = (Button) v.findViewById(R.id.digitkeypad_0);  
  69.         digitkeypad_c = (Button) v.findViewById(R.id.digitkeypad_c);  
  70.         digitkeypad_ok = (Button) v.findViewById(R.id.digitkeypad_ok);  
  71.         digitkeypad_edittext = (EditText) v.findViewById(R.id.digitpadedittext);  
  72.    
  73.         // 添加点击事件  
  74.         DigitPasswordKeypadOnClickListener dkol = new DigitPasswordKeypadOnClickListener();  
  75.         digitkeypad_1.setOnClickListener(dkol);  
  76.         digitkeypad_2.setOnClickListener(dkol);  
  77.         digitkeypad_3.setOnClickListener(dkol);  
  78.         digitkeypad_4.setOnClickListener(dkol);  
  79.         digitkeypad_5.setOnClickListener(dkol);  
  80.         digitkeypad_6.setOnClickListener(dkol);  
  81.         digitkeypad_7.setOnClickListener(dkol);  
  82.         digitkeypad_8.setOnClickListener(dkol);  
  83.         digitkeypad_9.setOnClickListener(dkol);  
  84.         digitkeypad_0.setOnClickListener(dkol);  
  85.         digitkeypad_c.setOnClickListener(dkol);  
  86.         digitkeypad_ok.setOnClickListener(new DigitPasswordKeypadFinshOnClikcListener());  
  87.    
  88.         return v;  
  89.     }  
  90.    
  91.     private class DigitPasswordKeypadFinshOnClikcListener implements OnClickListener {  
  92.    
  93.         @Override  
  94.         public void onClick(View v) {  
  95.             int viewId = v.getId();  
  96.    
  97.             if (viewId == R.id.digitkeypad_ok) {  
  98.                 // 点击完成  
  99.                 // 设置值回页面  
  100.                 // 隐藏自己View  
  101.                 // if (isPwd) {  
  102.                 // jsimpl.hidePasswdPad(digitkeypad_edittext.getText().toString());  
  103.                 // } else {  
  104.                 // jsimpl.hideCallNumPad(digitkeypad_edittext.getText().toString());  
  105.                 // }  
  106.                 DigitPasswordKeyPad.this.setVisibility(View.GONE);  
  107.             }  
  108.         }  
  109.     }  
  110.    
  111.     public void initInputLable(String str, int length) {  
  112.         str = str.trim();  
  113.         digitnum = str;  
  114.         this.length = length;  
  115.         digitkeypad_edittext.setText(digitnum);  
  116.         digitkeypad_edittext.setSelection(digitnum.length());  
  117.     }  
  118.    
  119.     private class DigitPasswordKeypadOnClickListener implements OnClickListener {  
  120.    
  121.         @Override  
  122.         public void onClick(View v) {  
  123.             int viewId = v.getId();  
  124.    
  125.             switch (viewId) {  
  126.             case R.id.digitkeypad_1:  
  127.                 if (digitnum.length() == length) {  
  128.                     return;  
  129.                 } else {  
  130.                     digitnum += 1;  
  131.                 }  
  132.                 break;  
  133.             case R.id.digitkeypad_2:  
  134.                 if (digitnum.length() == length) {  
  135.                     return;  
  136.                 } else {  
  137.                     digitnum += 2;  
  138.                 }  
  139.                 break;  
  140.             case R.id.digitkeypad_3:  
  141.                 if (digitnum.length() == length) {  
  142.                     return;  
  143.                 } else {  
  144.                     digitnum += 3;  
  145.                 }  
  146.                 break;  
  147.             case R.id.digitkeypad_4:  
  148.                 if (digitnum.length() == length) {  
  149.                     return;  
  150.                 } else {  
  151.                     digitnum += 4;  
  152.                 }  
  153.                 break;  
  154.             case R.id.digitkeypad_5:  
  155.                 if (digitnum.length() == length) {  
  156.                     return;  
  157.                 } else {  
  158.                     digitnum += 5;  
  159.                 }  
  160.                 break;  
  161.             case R.id.digitkeypad_6:  
  162.                 if (digitnum.length() == length) {  
  163.                     return;  
  164.                 } else {  
  165.                     digitnum += 6;  
  166.                 }  
  167.                 break;  
  168.             case R.id.digitkeypad_7:  
  169.                 if (digitnum.length() == length) {  
  170.                     return;  
  171.                 } else {  
  172.                     digitnum += 7;  
  173.                 }  
  174.                 break;  
  175.             case R.id.digitkeypad_8:  
  176.                 if (digitnum.length() == length) {  
  177.                     return;  
  178.                 } else {  
  179.                     digitnum += 8;  
  180.                 }  
  181.                 break;  
  182.             case R.id.digitkeypad_9:  
  183.                 if (digitnum.length() == length) {  
  184.                     return;  
  185.                 } else {  
  186.                     digitnum += 9;  
  187.                 }  
  188.                 break;  
  189.             case R.id.digitkeypad_0:  
  190.                 if (digitnum.length() == length) {  
  191.                     return;  
  192.                 } else {  
  193.                     digitnum += 0;  
  194.                 }  
  195.    
  196.                 break;  
  197.             case R.id.digitkeypad_c:// 后退  
  198.                 if (digitnum.length() > 0) {  
  199.                     digitnum = digitnum.substring(0, digitnum.length() - 1);  
  200.                 }  
  201.                 break;  
  202.             }  
  203.             // 格式化 数据  
  204.             digitkeypad_edittext.setText(digitnum);  
  205.             digitkeypad_edittext.setSelection(null != digitnum ? digitnum.length() : 0);  
  206.         }  
  207.    
  208.     }  
关注
打赏
1482932726
查看更多评论
立即登录/注册

微信扫码登录

0.1655s