MyKeyboard
Android自定義鍵盤的使用
實(shí)現(xiàn)步驟
第一步:
1孩饼、新建一個(gè)xml文件夾放在res目錄下面,然后新建xml文件:money_keyboard.xml
2微服、然后在XML文件中添加按鈕布局,這個(gè)布局就是鍵盤的樣子了
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:horizontalGap="1dp"
android:keyWidth="33.33333%p"
android:keyHeight="10%p"
android:verticalGap="1dp">
<Row>
<Key
android:codes="49"
android:keyLabel="1" />
<Key
android:codes="50"
android:keyLabel="2" />
<Key
android:codes="51"
android:keyEdgeFlags="right"
android:keyLabel="3" />
</Row>
<Row>
<Key
android:codes="52"
android:keyLabel="4" />
<Key
android:codes="53"
android:keyLabel="5" />
<Key
android:codes="54"
android:keyEdgeFlags="right"
android:keyLabel="6" />
</Row>
<Row>
<Key
android:codes="55"
android:keyLabel="7" />
<Key
android:codes="56"
android:keyLabel="8" />
<Key
android:codes="57"
android:keyEdgeFlags="right"
android:keyLabel="9" />
</Row>
<Row>
<Key
android:codes="46"
android:keyLabel="." />
<Key
android:codes="48"
android:keyLabel="0" />
<Key
android:codes="-5"
android:keyEdgeFlags="right"
android:keyIcon="@drawable/sym_keyboard_delete"
android:keyLabel="aa" />
</Row>
</Keyboard>
3 屬性介紹:
Keyboard:
存儲(chǔ)鍵盤以及按鍵相關(guān)信息缨历。
android:horizontalGap
按鍵之間默認(rèn)的水平間距以蕴。
android:verticalGap
按鍵之間默認(rèn)的垂直間距。
android:keyHeight
按鍵的默認(rèn)高度辛孵,以像素或顯示高度的百分比表示丛肮。
android:keyWidth:
按鍵的默認(rèn)寬度,以像素或顯示寬度的百分比表示魄缚。
Row:
為包含按鍵的容器宝与。
Key:
用于描述鍵盤中單個(gè)鍵的位置和特性。
android:codes
該鍵輸出的unicode值冶匹。
android:codes 官網(wǎng)介紹是說(shuō)這個(gè)是該鍵的unicode 值或者逗號(hào)分隔值习劫,當(dāng)然我們也可以設(shè)置成我們想要的值,在源碼中提供了幾個(gè)特定的值
對(duì)照表:
public static final int KEYCODE_SHIFT = -1;
public static final int KEYCODE_MODE_CHANGE = -2;
public static final int KEYCODE_CANCEL = -3;
public static final int KEYCODE_DONE = -4;
public static final int KEYCODE_DELETE = -5;
public static final int KEYCODE_ALT = -6;
android:isRepeatable
這個(gè)屬性如果設(shè)置為true嚼隘,那么當(dāng)長(zhǎng)按該鍵時(shí)就會(huì)重復(fù)接受到該鍵上的動(dòng)作诽里,在 刪除鍵鍵 和 空格鍵 上通常設(shè)為true。
android:keyLabel
顯示在按鍵上的文字飞蛹。
android:keyIcon
與keyLabel
是二選一關(guān)系谤狡,它會(huì)代替文字以圖標(biāo)的形式顯示在鍵上。
android:keyWidth="33.33333%p"
每一個(gè)按鈕的寬度,可以設(shè)置百分比
android:keyHeight="10%p"
每一個(gè)按鈕高度卧檐,可以設(shè)置百分比
第二步:布局文件引用KeyBoradView.
<com.zxn.keyboard.MoneyKeyboardView
android:id="@+id/keyboard_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="20dp"
android:background="#d8d8d8"
android:focusable="true"
android:focusableInTouchMode="true"
android:keyBackground="@drawable/bg_keyboard_btn"
android:keyTextColor="#333333"
android:paddingTop="1dp"
android:shadowColor="#ffffff"
android:shadowRadius="0.0"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/et_amount" />
KeyboardView是一個(gè)渲染虛擬鍵盤的View墓懂。 它處理鍵的渲染和檢測(cè)按鍵和觸摸動(dòng)作。
顯然我們需要KeyboardView來(lái)對(duì)Keyboard里的數(shù)據(jù)進(jìn)行渲染并呈現(xiàn)給我們以及相關(guān)的點(diǎn)擊事件做處理霉囚。 1)//設(shè)置keyboard與KeyboardView相關(guān)聯(lián)的方法捕仔。
public void setKeyboard(Keyboard keyboard)
2)//設(shè)置虛擬鍵盤事件的監(jiān)聽(tīng),此方法必須設(shè)置盈罐,不然會(huì)報(bào)錯(cuò)逻澳。
public void setOnKeyboardActionListener(OnKeyboardActionListener listener) 步驟上呢,做完第一步的關(guān)聯(lián)暖呕,并設(shè)置第二步的事件,調(diào)用KeyboardView.setVisible(true);鍵盤就可以顯示出來(lái)了苞氮, 是不是很簡(jiǎn)單湾揽。不過(guò)到這里還沒(méi)有結(jié)束哦,接下來(lái)我們?yōu)榱耸褂蒙系谋憷M(jìn)行相應(yīng)的封裝。 封裝 這里我們通過(guò)繼承EditText來(lái)對(duì)Keyboard與KeyboardView進(jìn)行封裝库物。
attr.xml文件霸旗,這里我們需要通過(guò)一個(gè)xml類型的自定義屬性引入我們的鍵盤描述文件。
三戚揭、實(shí)例化KeyBoradView給其設(shè)置KeyBorad诱告,以及OnKeyboardActionListener事件監(jiān)聽(tīng)。
1民晒、新建一個(gè)類精居,我取名叫KeyUtils然后在里面新建三個(gè)屬性。KeyBoard用處可大了潜必,他才是本體靴姿,可以通過(guò)設(shè)置他來(lái)切換鍵盤。
2磁滚、構(gòu)造函數(shù)佛吓,初始下三個(gè)參數(shù)。
3垂攘、先說(shuō)下預(yù)覽圖吧维雇,就是效果圖上的預(yù)覽圖,需要預(yù)覽圖的話的將setPreviewEnabled設(shè)置為true晒他,不過(guò)還得在布局文件中的android.inputmethodservice.KeyboardView標(biāo)簽對(duì)立面設(shè)置預(yù)覽布局吱型。否則,不會(huì)有字仪芒。至于設(shè)置的布局唁影,一個(gè)TextView就好了~
onPress: 按下觸發(fā)。
onRelease:松開(kāi)觸發(fā)掂名。
onKey : 松開(kāi)觸發(fā)据沈,在OnRelease之前觸發(fā)。
swipeLeft : 左滑動(dòng)饺蔑,其他同理锌介。哈哈~就這么懶。
onText :需要在 鍵盤xml猾警,也就是我此時(shí)的number.xml里面中key標(biāo)簽對(duì)里添加一個(gè)