Creați o tastatură personalizată pe Android

Ce veți crea

Cele mai multe dispozitive Android nu au o tastatură fizică. În schimb, se bazează pe o tastatură virtuală sau soft pentru a accepta intrarea utilizatorului. Dacă vă aflați în personalizarea Android, cunoașterea modului de a construi o tastatură personalizată, soft, vă poate duce hobby-ul la un nivel complet nou.

Folosind SDK-ul Android, puteți crea rapid o tastatură moale cu surprinzător de puține linii de cod, deoarece SDK-ul are grijă de multe dintre sarcinile de nivel scăzut, cum ar fi recunoașterea atingerilor cheie, desenarea tastaturii și stabilirea conexiunilor între tastatură și câmpurile de introducere.
În acest tutorial, veți învăța cum să creați o tastatură completă, funcțională, care poate servi ca tastatură implicită a dispozitivului dvs. Android.

Opțiunea Premium

Dacă vă grăbiți, verificați temele Android Keyboard, o soluție gata de utilizat de la Envato Market. 

Aplicația vă oferă flexibilitatea de a alege unul dintre cele 22 de teme de tastatură încorporate sau de a vă crea propria temă personalizată.

Teme pentru tastatură Android

Sau ai putea angaja un freelancer pe Envato Studio. Doar parcurgeți secțiunea Mobile & Apps și sunteți sigur că veți găsi un expert care vă poate ajuta.

Dezvoltatori de aplicații mobile și de aplicații de pe Envato Studio;

Dacă preferați să construiți propriul dvs., citiți mai departe pentru a afla cum.

1. Condiții preliminare

Veți avea nevoie de pachetul Eclipse ADT instalat. Puteți să o descărcați de pe site-ul Android Developer.

2. Creați un nou proiect

Activați Eclipse și creați o nouă aplicație Android. Apelați această aplicație, SimpleKeyboard. Asigurați-vă că alegeți un nume de pachet unic. Setați setul SDK minim necesar Android 2.2 și setați SDK-ul țintă Android 4.4.

Această aplicație nu va avea activități care să deselecteze acest lucru Creați activitate și faceți clic pe finalizarea.

3. Editați Manifestul

O tastatură moale este considerată ca o Metoda Editor de intrare (IME) de sistemul de operare Android. Un IME este declarat a Serviciu în AndroidManifest.xml care utilizează BIND_INPUT_METHOD permisiune și răspunde la acțiune android.view.InputMethod.

Adăugați următoarele linii la cerere eticheta manifestului:

     

4. Creați metoda.xml

serviciu tag în fișierul manifest conține un a meta-date tag care trimite la un fișier XML numit method.xml. Fără acest fișier, sistemul de operare Android nu ne va recunoaște Serviciu ca serviciu valabil IME. Fișierul conține detalii despre metoda de introducere și subtipurile acesteia. Pentru tastatura noastră, definim un singur subtip pentru ro_ localizare. Creați directorul res / xml dacă nu există, adăugați fișierul method.xml la el. Conținutul fișierului ar trebui să fie:

   

5. Editați strings.xml

Corzile pe care această aplicație le utilizează sunt definite în secțiunea res / valori / strings.xml fişier. Vom avea nevoie de trei șiruri:

  • numele aplicației
  • eticheta IME
  • eticheta subtipului IME

Actualizați-vă strings.xml astfel încât să aibă următorul conținut:

 SimpleKeyboard Simplă IME Română (SUA) 

6. Definiți aspectul tastaturii

Structura tastaturii noastre conține doar a KeyboardView. layout_alignParentBottom atributul este setat la Adevărat astfel încât tastatura să apară în partea de jos a ecranului.

Creați un fișier numit res / aspect / keyboard.xml și înlocuiți conținutul cu următoarele:

 

keyPreviewLayout este aspectul ferestrei pop-up de scurtă durată care apare ori de câte ori este apăsată o tastă de pe tastatură. Acesta conține un singur TextView. Creați un fișier numit res / aspect / preview.xml și adăugați următoarele:

  

6. Definiți tastele tastaturii

Detaliile cheilor de tastatură și pozițiile acestora sunt specificate într-un fișier XML. Fiecare cheie are următoarele atribute:

  • keyLabel: Acest atribut conține textul afișat pe tastă.
  • coduri: Acest atribut conține valorile unicode ale caracterelor reprezentate de cheie.

De exemplu, pentru a defini o cheie pentru literă A, coduri atributul ar trebui să aibă valoarea 97 si keyLabel atributul ar trebui setat la A.

Dacă mai multe coduri sunt asociate cu o cheie, atunci caracterul reprezentat de cheie va depinde de numărul de robinete pe care le primește cheia. De exemplu, dacă o cheie are codurile 63, 33, și 58:

  • un singur apăsare pe tastă are ca rezultat caracterul ?
  • două lovituri în succesiune rapidă au ca rezultat caracterul !
  • trei lovituri în succesiune rapidă au ca rezultat caracterul :

O cheie poate avea și câteva atribute opționale:

  • keyEdgeFlags: Acest atribut poate lua valoarea stânga sau dreapta. Acest atribut este de obicei adăugat la tastele din stânga și la dreapta unui rând.
  • keyWidth: Acest atribut definește lățimea unei taste. De obicei este definită ca valoare procentuală.
  • isRepeatable: Dacă acest atribut este setat la Adevărat, apăsând lung tasta va repeta acțiunea cheii de mai multe ori. Este de obicei setat la Adevărat pentru tastele de ștergere și bara de spațiu.

Tastele unei tastaturi sunt grupate ca rânduri. Este o practică bună să limitați numărul de taste dintr-un rând la maximum zece, fiecare cheie având o lățime egală cu 10% din tastatură. Înălțimea tastelor este setată la 60dp în acest tutorial. Această valoare poate fi ajustată, dar valori mai mici decât 48dp nu sunt recomandate. Tastatura noastră va avea cinci rânduri de taste.

Acum putem merge și proiectăm tastatura. Creați un fișier nou numit res / xml / qwerty.xml și înlocuiți conținutul cu următoarele:

                                                        

Este posibil să fi observat că unele chei au valori negative pentru coduri atribut. Valorile negative sunt egale cu constantele predefinite din Tastatură clasă. De exemplu, valoarea -5 este egal cu valoarea lui Keyboard.KEYCODE_DELETE.

7. Creați un Serviciu Clasă

Creați o nouă clasă Java și apelați-o SimpleIME.java. Clasa ar trebui să se extindă InputMethodService clasați și implementați OnKeyboardActionListener interfață. OnKeyboardActionListener interfața conține metodele care sunt numite atunci când tastele tastaturii soft sunt apăsate sau apăsate.

SimpleIME clasa ar trebui să aibă trei variabile membre:

  • KeyboardView referindu-se la vederea definită în plan
  • Tastatură instanță care îi este atribuită KeyboardView
  • boolean spunându-ne dacă blocarea capacelor este activată

După declararea acestor variabile și adăugarea metodelor OnKeyboardActionListener interfață, SimpleIME clasa ar trebui să arate astfel:

clasa publică SimpleIME extinde InputMethodService implementează OnKeyboardActionListener private KeyboardView kv; tastatură tastatură privată; private boolean caps = false; @Override public void onKey (int primCode, int [] keyCodes)  @Override public void onPress (int primCode)  @Override public void onRelease (int primCode)  @Override public void onText CharSequence text  @ ()  @Override public void swipeLeft ()  @Override public void swiftRight ()  @Override public void swipeUp () 

Atunci când este creată tastatura, onCreateInputView se numește metoda. Toate variabilele membrilor Serviciu pot fi inițializate aici. Actualizați punerea în aplicare a onCreateInputView după cum se arată mai jos:

@Overide publice Vizualizare onCreateInputView () kv = (KeyboardView) getLayoutInflater () inflate (R.layout.keyboard, null); tastatură = tastatură nouă (aceasta, R.xml.qwerty); kv.setKeyboard (tastatura); kv.setOnKeyboardActionListener (aceasta); returnează kv; 

Apoi, vom crea o metodă care va reda un sunet când este apăsată o tastă. Noi folosim AudioManager pentru a reda sunetele. SDK-ul Android include câteva efecte sonore implicite pentru presele de taste și acestea sunt utilizate în playClick metodă.

private void playClick (int keyCode) AudioManager am = (AudioManager) getSystemService (AUDIO_SERVICE); comutator (keyCode) caz 32: am.playSoundEffect (AudioManager.FX_KEYPRESS_SPACEBAR); pauză; cazul Keyboard.KEYCODE_DONE: cazul 10: am.playSoundEffect (AudioManager.FX_KEYPRESS_RETURN); pauză; caz Keyboard.KEYCODE_DELETE: am.playSoundEffect (AudioManager.FX_KEYPRESS_DELETE); pauză; implicit: am.playSoundEffect (AudioManager.FX_KEYPRESS_STANDARD); 

În cele din urmă, actualizați onKey astfel încât aplicația noastră de tastatură să poată comunica cu câmpurile de intrare (de obicei Editează textul vizualizări) ale altor aplicații.

getCurrentInputConnection metoda este folosită pentru a obține o conexiune la câmpul de intrare al unei alte aplicații. Odată ce avem conexiunea, putem folosi următoarele metode:

  • commitText pentru a adăuga unul sau mai mulți caractere în câmpul de introducere
  • deleteSurroundingText pentru a șterge unul sau mai mulți caractere din câmpul de introducere
  • sendKeyEvent pentru a trimite evenimente, cum ar fi KEYCODE_ENTER, la aplicația externă

Ori de câte ori un utilizator apasă o tastă pe tastatura soft, onKey metoda se numește cu valoarea unicode a cheii ca unul dintre parametrii săi. Pe baza acestei valori, tastatura efectuează una dintre următoarele acțiuni:

  • Dacă codul este KEYCODE_DELETE, un caracter din stânga cursorului este șters folosind deleteSurroundingText metodă.
  • Dacă codul este KEYCODE_DONE, A KEYCODE_ENTER eveniment cheie este declanșat.
  • Dacă codul este KEYCODE_SHIFT, valoarea capace variabila este modificată și starea de schimbare a tastaturii este actualizată folosind setShifted metodă. Tastatura trebuie să fie redesenată atunci când starea se schimbă, astfel încât etichetele cheilor să fie actualizate. invalidateAllKeys metoda este folosită pentru redragerea tuturor cheilor.
  • Pentru toate celelalte coduri, codul este pur și simplu transformat într-un caracter și trimis la câmpul de intrare. Dacă codul reprezintă o literă a alfabetului și a literei capace este setată la Adevărat, atunci caracterul este convertit la majuscule.

Actualizați onKey astfel încât să pară următoarele:

@Override public void onKey (int primCode, int [] keyCodes) InputConnection ic = getCurrentInputConnection (); playClick (primaryCode); comutator (primCode) tastatură caz.KEYCODE_DELETE: ic.deleteSurroundingText (1, 0); pauză; carcasă Keyboard.KEYCODE_SHIFT: caps =! caps; keyboard.setShifted (capace); kv.invalidateAllKeys (); pauză; carcasă Keyboard.KEYCODE_DONE: ic.sendKeyEvent (noul KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); pauză; implicit: codul char = (char) primaryCode; dacă (Character.isLetter (code) && caps) code = Character.toUpperCase (cod);  ic.commitText (String.valueOf (cod), 1); 

8. Testarea tastaturii

Tastatura soft este acum pregătită pentru a fi testată. Compilați și rulați-l pe un dispozitiv Android. Această aplicație nu are o aplicație Activitate, ceea ce înseamnă că nu va apărea în lansator. Pentru a-l utiliza, ar trebui să fie activat mai întâi în dispozitiv Setări.

După activare Simplă IME, deschideți orice aplicație care permite introducerea textului (de exemplu, orice aplicație de mesagerie) și faceți clic pe unul din câmpurile sale de introducere. Ar trebui să apară o pictogramă de tastatură în zona de notificări. În funcție de dispozitivul dvs., puteți să dați clic pe pictograma respectivă sau să glisați bara de notificare în jos și selectați Simplă IME ca metodă de intrare. Acum ar trebui să puteți tasta folosind noua tastatură.

Concluzie

În acest tutorial, ați învățat cum să creați o aplicație personalizată de la tastatură de la zero. Pentru a schimba aspectul tastaturii, tot ce trebuie să faceți este să adăugați stilul suplimentar la res / aspect / keyboard.xml și res / aspect / preview.xml fișiere. Pentru a schimba pozițiile tastelor, actualizați res / xml / qwerty.xml fişier. Pentru a adăuga mai multe caracteristici la tastatură, consultați documentația dezvoltatorului.


Cod