Android自定義軟鍵盤

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ì)照表:

image.png

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:keyIconkeyLabel
是二選一關(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è)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末孔祸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子发皿,更是在濱河造成了極大的恐慌崔慧,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穴墅,死亡現(xiàn)場(chǎng)離奇詭異惶室,居然都是意外死亡温自,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門皇钞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悼泌,“玉大人,你說(shuō)我怎么就攤上這事夹界」堇铮” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵可柿,是天一觀的道長(zhǎng)鸠踪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)趾痘,這世上最難降的妖魔是什么慢哈? 我笑而不...
    開(kāi)封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮永票,結(jié)果婚禮上卵贱,老公的妹妹穿的比我還像新娘。我一直安慰自己侣集,他們只是感情好键俱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著世分,像睡著了一般编振。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上臭埋,一...
    開(kāi)封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天踪央,我揣著相機(jī)與錄音,去河邊找鬼瓢阴。 笑死畅蹂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的荣恐。 我是一名探鬼主播液斜,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叠穆!你這毒婦竟也來(lái)了少漆?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤硼被,失蹤者是張志新(化名)和其女友劉穎示损,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體嚷硫,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屎媳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年夺溢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烛谊。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嘉汰,靈堂內(nèi)的尸體忽然破棺而出丹禀,到底是詐尸還是另有隱情,我是刑警寧澤鞋怀,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布双泪,位于F島的核電站,受9級(jí)特大地震影響密似,放射性物質(zhì)發(fā)生泄漏焙矛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一残腌、第九天 我趴在偏房一處隱蔽的房頂上張望村斟。 院中可真熱鬧,春花似錦抛猫、人聲如沸蟆盹。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)逾滥。三九已至,卻和暖如春败匹,著一層夾襖步出監(jiān)牢的瞬間寨昙,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工掀亩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舔哪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓归榕,卻偏偏與公主長(zhǎng)得像尸红,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子刹泄,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 先上圖: 剛開(kāi)始寫自定義軟鍵盤是走了點(diǎn)彎路外里,用控件去實(shí)現(xiàn),好多小細(xì)節(jié)處理起來(lái)真的太抓狂了… 后來(lái)發(fā)現(xiàn) 神控件 Ke...
    silence_jjj閱讀 4,358評(píng)論 0 0
  • 一特石、 Android 自定義軟鍵盤開(kāi)發(fā)流程 建立軟鍵盤樣式 即在項(xiàng)目res文件夾中創(chuàng)建所需要的各種軟鍵盤的樣式...
    Double丨鐵人閱讀 3,281評(píng)論 0 2
  • 前言 ★本文簡(jiǎn)述: 簡(jiǎn)單通過(guò)KeyBoardView實(shí)現(xiàn)自定義鍵盤功能盅蝗。 真的只是給和我一樣的渣渣簡(jiǎn)單介紹,所以了...
    路人葵閱讀 28,746評(píng)論 11 20
  • 簡(jiǎn)介 今天在掘金上看了一篇文章,實(shí)現(xiàn)自定義軟鍵盤,發(fā)現(xiàn)其實(shí)實(shí)現(xiàn)方式比較簡(jiǎn)單,不需要改動(dòng)系統(tǒng)api,只是單純的加載自...
    fushuang閱讀 4,513評(píng)論 1 14
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程姆蘸,因...
    小菜c閱讀 6,365評(píng)論 0 17