Android 自定义密码键盘

本文介绍了因项目需求自定义Android键盘的过程,包括英文字母、数字、标点符号键盘的布局,特殊键处理,屏蔽原生键盘以及点击按键显示PopupWindow的技巧。详细讲解了各个步骤,并附带demo截图和下载链接。
摘要由CSDN通过智能技术生成

原来自己很懒没有写过博客,所以样式凑合着看吧,近期因为项目的需求,需要自定义键盘,但是在网上找的都不符合自己的要求,所以索性自己开发,说实话自定义键盘是很简单的,但是在做点击键盘上的按键提示PopupWindow计算位置时真费心,好了废话不多说了,来看代码吧!

一、自定义键盘思路

1.英文字母view(包括大小写)
2.数字键盘view
3.标点符号键盘view
4.特殊键的处理
5.屏蔽原生键盘的显示方法
6.点击键盘有PopupWindow提示

二、界面布局

1.英文字母键盘布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/eng_keyboard"
    android:layout_width="fill_parent"
    android:layout_height="240dip"
    android:layout_weight="5.0"
    android:background="@drawable/keyboard_bg"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:layout_marginBottom="2.0dip"
        android:layout_marginTop="6.0dip"
        android:layout_weight="1.0"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/eng_key_Q"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/q"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_W"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/w"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_E"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/e"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_R"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/r"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_T"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/t"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_Y"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/y"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_U"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/u"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_I"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/i"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_O"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/o"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_P"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/p"
            android:textColor="@color/white"
            android:textSize="22.0sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:layout_marginBottom="2.0dip"
        android:layout_marginTop="6.0dip"
        android:layout_weight="1.0"
        android:orientation="horizontal" >

        <ImageView
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:contentDescription="@string/desc" />

        <Button
            android:id="@+id/eng_key_A"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/a"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_S"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/s"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_D"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/d"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_F"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/f"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_G"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/g"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_H"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/h"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_J"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/j"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_K"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/k"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_L"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/l"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <ImageView
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_weight="1.0"
            android:contentDescription="@string/desc" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:layout_marginBottom="2.0dip"
        android:layout_marginTop="6.0dip"
        android:layout_weight="1.0"
        android:orientation="horizontal" >

        <RelativeLayout
            android:id="@+id/eng_key_Shift"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="3.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:clickable="true" >

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:background="@drawable/keyboard_shift"
                android:contentDescription="@string/desc" />
        </RelativeLayout>

        <Button
            android:id="@+id/eng_key_Z"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/z"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_X"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/x"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_C"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/c"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_V"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/v"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_B"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/b"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_N"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/n"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <Button
            android:id="@+id/eng_key_M"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/m"
            android:textColor="@color/white"
            android:textSize="22.0sp" />

        <RelativeLayout
            android:id="@+id/eng_key_Del"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="3.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:clickable="true" >

            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:background="@drawable/eng_keyboard_delete"
                android:contentDescription="@string/desc" />
        </RelativeLayout>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:layout_marginBottom="2.0dip"
        android:layout_marginTop="6.0dip"
        android:layout_weight="1.0"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/eng_key_123"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/ott"
            android:textColor="@color/white"
            android:textSize="15.0sp" />

        <Button
            android:id="@+id/eng_key_Space"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="2.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:text="@string/keyboard_kongge"
            android:textColor="@color/white"
            android:textSize="15.0sp" />


           <Button
            android:id="@+id/eng_key_fuhao"
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_marginLeft="1.0dip"
            android:layout_marginRight="1.0dip"
            android:layout_weight="1.0"
            android:background="@drawable/eng_keyboard_button_bg"
            android:gravity="center"
            android:text="符"
            android:shadowColor="#ff020202"
            android:shadowDx="0.0"
            android:shadowDy="1.0"
            android:shadowRadius="1.0"
            android:textColor="@color/white"
            android:textSize="15.0sp" />
    </LinearLayout>

</LinearLayout>

2.数字键盘

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/num_keyboard"
    android:layout_width="fill_parent"
    android:layout_height="240dip"
    android:layout_alignParentBottom="true"
    android:layout_weight="5.0"
    android:background="@drawable/keyboard_bg"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="0.0dip"
        android:layout_marginTop="5.0dip"
        android:layout_weight="3.0"
        android:baselineAligned="false"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="0.0dip"
            android:layout_height="fill_parent"
            android:layout_margin="1.0dip"
            android:layout_weight="1.0"
            android:orientation="vertical" >

            <ScrollView
                android:id="@+id/quick_input_box"
                androi
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值