原来自己很懒没有写过博客,所以样式凑合着看吧,近期因为项目的需求,需要自定义键盘,但是在网上找的都不符合自己的要求,所以索性自己开发,说实话自定义键盘是很简单的,但是在做点击键盘上的按键提示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