`
jiav_net
  • 浏览: 103565 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

效果图:

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() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[0]+"";
				editable.insert(index, str);
			}
		});
		btn1.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[1]+"";
				editable.insert(index, str);
			}
		});
		btn2.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[2]+"";
				editable.insert(index, str);
			}
		});
		btn3.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[3]+"";
				editable.insert(index, str);
			}
		});
		btn4.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[4]+"";
				editable.insert(index, str);
			}
		});
		btn5.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[5]+"";
				editable.insert(index, str);
			}
		});
		btn6.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[6]+"";
				editable.insert(index, str);
			}
		});
		btn7.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[7]+"";
				editable.insert(index, str);
			}
		});
		btn8.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[8]+"";
				editable.insert(index, str);
			}
		});
		btn9.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				int index = editText.getSelectionStart();
				String str = randomKeys[9]+"";
				editable.insert(index, str);
			}
		});

		btn_del.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				try {
					int index = editText.getSelectionStart();
					editable.delete(index - 1, index);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});
		btn_clear.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				editable.clear();
			}
		});
		btn_conf.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				popupWindow.dismiss();
				button.requestFocus();
			}
		});
		// 禁止EditText获得焦点后弹出系统键盘
		editText.setInputType(InputType.TYPE_NULL);
		editText.setOnFocusChangeListener(new OnFocusChangeListener() {
			@Override
			public void onFocusChange(View arg0, boolean arg1) {
				// TODO Auto-generated method stub
				if (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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics