android-使用PopupWindow实现随机排列的自定义密码键盘

来源:互联网 发布:autocad2011软件下载 编辑:程序博客网 时间:2024/06/05 02:51

效果图:

 

MainActivity.java

View keyboardView = LayoutInflater.from(this).inflate(R.layout.random_keyboard, null);Display display = getWindowManager().getDefaultDisplay();int height = (int) getResources().getDimension(R.dimen.height);popupWindow = new PopupWindow(keyboardView, display.getWidth(),height * 4, false);btn0 = (Button) keyboardView.findViewById(R.id.keyboard_btn0);btn1 = (Button) keyboardView.findViewById(R.id.keyboard_btn1);btn2 = (Button) keyboardView.findViewById(R.id.keyboard_btn2);btn3 = (Button) keyboardView.findViewById(R.id.keyboard_btn3);btn4 = (Button) keyboardView.findViewById(R.id.keyboard_btn4);btn5 = (Button) keyboardView.findViewById(R.id.keyboard_btn5);btn6 = (Button) keyboardView.findViewById(R.id.keyboard_btn6);btn7 = (Button) keyboardView.findViewById(R.id.keyboard_btn7);btn8 = (Button) keyboardView.findViewById(R.id.keyboard_btn8);btn9 = (Button) keyboardView.findViewById(R.id.keyboard_btn9);btn_del = (Button) keyboardView.findViewById(R.id.keyboard_btn_del);btn_clear = (Button) keyboardView.findViewById(R.id.keyboard_btn_clear);btn_conf = (Button) keyboardView.findViewById(R.id.keyboard_btn_conf);btn0.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[0]+"";editable.insert(index, str);}});btn1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[1]+"";editable.insert(index, str);}});btn2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[2]+"";editable.insert(index, str);}});btn3.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[3]+"";editable.insert(index, str);}});btn4.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[4]+"";editable.insert(index, str);}});btn5.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[5]+"";editable.insert(index, str);}});btn6.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[6]+"";editable.insert(index, str);}});btn7.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[7]+"";editable.insert(index, str);}});btn8.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[8]+"";editable.insert(index, str);}});btn9.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubint index = editText.getSelectionStart();String str = randomKeys[9]+"";editable.insert(index, str);}});btn_del.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubtry {int index = editText.getSelectionStart();editable.delete(index - 1, index);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}});btn_clear.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubeditable.clear();}});btn_conf.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubpopupWindow.dismiss();button.requestFocus();}});// 禁止EditText获得焦点后弹出系统键盘editText.setInputType(InputType.TYPE_NULL);editText.setOnFocusChangeListener(new OnFocusChangeListener() {@Overridepublic void onFocusChange(View arg0, boolean arg1) {// TODO Auto-generated method stubif (arg1) {updateKeyBoard();popupWindow.showAsDropDown(editText, 0, 0);popupWindow.update();}}});}private void updateKeyBoard() {randomKeys = getRandomNum();btn0.setText(randomKeys[0] + "");btn1.setText(randomKeys[1] + "");btn2.setText(randomKeys[2] + "");btn3.setText(randomKeys[3] + "");btn4.setText(randomKeys[4] + "");btn5.setText(randomKeys[5] + "");btn6.setText(randomKeys[6] + "");btn7.setText(randomKeys[7] + "");btn8.setText(randomKeys[8] + "");btn9.setText(randomKeys[9] + "");}//生成随机的0-9 10个数字,且值各不相同private int[] getRandomNum() {Random random = new Random();int[] data = new int[10];boolean b;boolean b2 = false;boolean b3 = true;int x;for (int i = 0; i < 10; i++) {b = true;while (b) {x = random.nextInt(10);if (x == 0 && b3) {b3 = false;b = false;}for (int y : data) {if (x == y) {b2 = false;break;} else {b2 = true;}}if (b2) {data[i] = x;b = false;break;}}}return data;}




keyboard_bg_big.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" >           <item      android:state_pressed="true"     android:drawable="@drawable/key11"/>        <item     android:state_focused="true"     android:drawable="@drawable/key12"/>        <item         android:state_focused="false"         android:state_pressed="false"          android:drawable="@drawable/keyboard_key_style" />     </selector>


keyboard_bg_small.xml

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android" >           <item      android:state_pressed="true"     android:drawable="@drawable/key11"/>        <item     android:state_focused="true"     android:drawable="@drawable/key12"/>        <item         android:state_focused="false"         android:state_pressed="false"          android:drawable="@drawable/keyboard_key_style" />     </selector>


keyboard_bg_style.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle" >    <gradient        android:angle="90.0"        android:endColor="#ffffff"        android:startColor="#ffffff" />    <corners        android:bottomLeftRadius="6.0dip"        android:bottomRightRadius="6.0dip"        android:topLeftRadius="6.0dip"        android:topRightRadius="6.0dip" /></shape>


keyboard_key_style.xml

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle" >    <size        android:height="36.0dip"        android:width="80.0dip" />    <gradient        android:angle="90.0"        android:endColor="#D7D7D7"        android:startColor="#D7D7D7" />    <corners        android:bottomLeftRadius="6.0dip"        android:bottomRightRadius="6.0dip"        android:topLeftRadius="6.0dip"        android:topRightRadius="6.0dip" /></shape>

random_keyboard.xml

<?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="@drawable/keyboard_bg_style"    android:orientation="vertical" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginLeft="3dp"        android:layout_marginRight="3dp"        android:layout_marginTop="3dp"        android:orientation="horizontal" >        <Button            android:id="@+id/keyboard_btn1"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="1"            android:textSize="20dp" />        <Button            android:id="@+id/keyboard_btn2"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_marginLeft="3dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="2"            android:textSize="20dp" />        <Button            android:id="@+id/keyboard_btn3"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_marginLeft="3dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="3"            android:textSize="20dp" />        <Button            android:id="@+id/keyboard_btn9"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_marginLeft="3dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="."            android:textSize="20dp" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginLeft="3dp"        android:layout_marginRight="3dp"        android:layout_marginTop="3dp"        android:orientation="horizontal" >        <Button            android:id="@+id/keyboard_btn4"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="4"            android:textSize="20dp" />        <Button            android:id="@+id/keyboard_btn5"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_marginLeft="3dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="5"            android:textSize="20dp" />        <Button            android:id="@+id/keyboard_btn6"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_marginLeft="3dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="6"            android:textSize="20dp" />        <Button            android:id="@+id/keyboard_btn0"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_marginLeft="3dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="0"            android:textSize="20dp" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginLeft="3dp"        android:layout_marginRight="3dp"        android:layout_marginTop="3dp"        android:orientation="horizontal" >        <Button            android:id="@+id/keyboard_btn7"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_weight="3"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="7"            android:textSize="20dp" />        <Button            android:id="@+id/keyboard_btn8"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_marginLeft="3dp"            android:layout_weight="3"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="8"            android:textSize="20dp" />        <Button            android:id="@+id/keyboard_btn_del"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_marginLeft="3dp"            android:layout_weight="2"            android:background="@drawable/keyboard_bg_small"            android:gravity="center_horizontal|center_vertical"            android:text="删除"            android:textSize="20dp" />    </LinearLayout>    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_marginBottom="3dp"        android:layout_marginLeft="3dp"        android:layout_marginRight="3dp"        android:layout_marginTop="3dp"        android:orientation="horizontal" >        <Button            android:id="@+id/keyboard_btn_clear"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_big"            android:gravity="center_horizontal|center_vertical"            android:text="清空"            android:textSize="20dp" />        <Button            android:id="@+id/keyboard_btn_conf"            android:layout_width="fill_parent"            android:layout_height="55dp"            android:layout_marginLeft="3dp"            android:layout_weight="1"            android:background="@drawable/keyboard_bg_big"            android:gravity="center_horizontal|center_vertical"            android:text="确定"            android:textSize="20dp" />    </LinearLayout></LinearLayout>

源码下载:http://download.csdn.net/detail/centralperk/5075724
 

原创粉丝点击